#座標はxは負の場合もあるの絶対値をとること
X, K, D = list(map(int, input().split()))
X = abs(X)
#K回繰り返すことを考慮すること
i = min(X//D, K) #移動回数が最小の方をとる
X = X - i*D
K = K - i

if K > 0:
    if K % 2 == 1:
        X = X - D
print(abs(X)) X, K, D = list(map(int, input().split())) X list(map(int, input().split())) list map(int, input().split()) map int input().split() ().split () input split K D X = abs(X) X abs(X) abs X i = min(X//D, K) i min(X//D, K) min X//D X D K X = X - i*D X X - i*D X i*D i D K = K - i K K - i K i if K > 0:
    if K % 2 == 1:
        X = X - D K > 0 K 0 if K % 2 == 1:
        X = X - D K % 2 == 1 K % 2 K 2 1 X = X - D X X - D X D print(abs(X)) print abs(X) abs X i = min(X//D, K) min(X//D, K) i D = list(map(int, input().split())) list(map(int, input().split())) D X = abs(X) abs(X) X K = K - i K - i K X = X - i*D X - i*D X K, D = list(map(int, input().split())) list(map(int, input().split())) K X = X - D X - D X X, K, D = list(map(int, input().split())) list(map(int, input().split())) X
#座標はxは負の場合もあるの絶対値をとること
X, K, D = list(map(int, input().split()))
X = abs(X)
#K回繰り返すことを考慮すること
i = min(X//D, K) #移動回数が最小の方をとる
X = X - i*D
K = K - i

if K > 0:
    if K % 2 == 1:
        X = X - D
print(abs(X))