X, K, D = map(int, input().split())

# Xは0以上として一般性を失わない
X = abs(X)
ans = 0
# 「X-KD>=0」であれば、その地点で終了
# 「X-KD<0」であれば、原点周りを振動する
if X - K*D >= 0:
  ans = X - K*D
else:
  count = X // D
  K = K - (X // D) # math.floor() を使うより簡潔
  if K % 2 == 0: 
    ans = X - count*D
  else: 
    ans = D - (X - count*D)
    
print(ans) X, K, D = map(int, input().split()) X map(int, input().split()) map int input().split() ().split () input split K D X = abs(X) X abs(X) abs X ans = 0 ans 0 if X - K*D >= 0:
  ans = X - K*D
else:
  count = X // D
  K = K - (X // D) # math.floor() を使うより簡潔
  if K % 2 == 0: 
    ans = X - count*D
  else: 
    ans = D - (X - count*D)
     X - K*D >= 0 X - K*D X K*D K D 0 ans = X - K*D ans X - K*D X K*D K D count = X // D count X // D X D K = K - (X // D) K K - (X // D) K X // D X D if K % 2 == 0: 
    ans = X - count*D
  else: 
    ans = D - (X - count*D)
     K % 2 == 0 K % 2 K 2 0 ans = X - count*D ans X - count*D X count*D count D ans = D - (X - count*D) ans D - (X - count*D) D X - count*D X count*D count D print(ans) print ans X, K, D = map(int, input().split()) map(int, input().split()) X X = abs(X) abs(X) X ans = 0 0 ans D = map(int, input().split()) map(int, input().split()) D ans = X - K*D X - K*D ans ans = D - (X - count*D) D - (X - count*D) ans K = K - (X // D) K - (X // D) K count = X // D X // D count ans = X - count*D X - count*D ans K, D = map(int, input().split()) map(int, input().split()) K
X, K, D = map(int, input().split())

# Xは0以上として一般性を失わない
X = abs(X)
ans = 0
# 「X-KD>=0」であれば、その地点で終了
# 「X-KD<0」であれば、原点周りを振動する
if X - K*D >= 0:
  ans = X - K*D
else:
  count = X // D
  K = K - (X // D) # math.floor() を使うより簡潔
  if K % 2 == 0: 
    ans = X - count*D
  else: 
    ans = D - (X - count*D)
    
print(ans)