#今Xにいる、K回 D移動する
[X, K, D] = [int(i) for i in input().split()]
#正負で答え変化しないので、正に変える
X = abs(X)
if X - K*D > 0:
#原点に到達しないとき
    print(X-K*D)
#原点に到達するとき
else:
    #往復始める正の位置を求める
    time = int(X/D)
    start = X - D * time
    #残り移動回数を計算
    time_re = K - time
    #残り回数の偶奇で場合分け
    if time_re % 2 == 0:
        print(start)
    else:
        print(abs(start-D)) int(i) for i in input().split() for i in input().split() i input().split() ().split () input split for i in input().split() int(i) int i [X, K, D] = [int(i) for i in input().split()] [X, K, D] X K D [int(i) for i in input().split()] X = abs(X) X abs(X) abs X if X - K*D > 0:
#原点に到達しないとき
    print(X-K*D)
#原点に到達するとき
else:
    #往復始める正の位置を求める
    time = int(X/D)
    start = X - D * time
    #残り移動回数を計算
    time_re = K - time
    #残り回数の偶奇で場合分け
    if time_re % 2 == 0:
        print(start)
    else:
        print(abs(start-D)) X - K*D > 0 X - K*D X K*D K D 0 print(X-K*D) print X-K*D X K*D K D time = int(X/D) time int(X/D) int X/D X D start = X - D * time start X - D * time X D * time D time time_re = K - time time_re K - time K time if time_re % 2 == 0:
        print(start)
    else:
        print(abs(start-D)) time_re % 2 == 0 time_re % 2 time_re 2 0 print(start) print start print(abs(start-D)) print abs(start-D) abs start-D start D start = X - D * time X - D * time start time_re = K - time K - time time_re time = int(X/D) int(X/D) time X = abs(X) abs(X) X
#今Xにいる、K回 D移動する
[X, K, D] = [int(i) for i in input().split()]
#正負で答え変化しないので、正に変える
X = abs(X)
if X - K*D > 0:
#原点に到達しないとき
    print(X-K*D)
#原点に到達するとき
else:
    #往復始める正の位置を求める
    time = int(X/D)
    start = X - D * time
    #残り移動回数を計算
    time_re = K - time
    #残り回数の偶奇で場合分け
    if time_re % 2 == 0:
        print(start)
    else:
        print(abs(start-D))