x ,k ,d = map(int,input().split())

x = abs(x)
c = x // d
# 必要な移動回数
k_r = k - c
# 移動した後の残りの移動回数
ans_2 = x - d * c
#残り移動回数が偶数のときのｘからの距離

if c >= k:
    print(x - k * d )
    exit()

x_l = x - d * c
#ｘまでの残りの距離

if k_r % 2 == 0:
    print(ans_2)
    exit()
else :
    x_l -= d
    x_l =abs(x_l)
    print(x_l) 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 c = x // d c x // d x d k_r = k - c k_r k - c k c ans_2 = x - d * c ans_2 x - d * c x d * c d c if c >= k:
    print(x - k * d )
    exit() c >= k c k print(x - k * d ) print x - k * d x k * d k d exit() exit x_l = x - d * c x_l x - d * c x d * c d c if k_r % 2 == 0:
    print(ans_2)
    exit()
else :
    x_l -= d
    x_l =abs(x_l)
    print(x_l) k_r % 2 == 0 k_r % 2 k_r 2 0 print(ans_2) print ans_2 exit() exit x_l -= d x_l d x_l =abs(x_l) x_l abs(x_l) abs x_l print(x_l) print x_l x = abs(x) abs(x) x k_r = k - c k - c k_r k ,d = map(int,input().split()) map(int,input().split()) k c = x // d x // d c x_l = x - d * c x - d * c x_l d = map(int,input().split()) map(int,input().split()) d ans_2 = x - d * c x - d * c ans_2 x_l =abs(x_l) abs(x_l) x_l x ,k ,d = map(int,input().split()) map(int,input().split()) x x_l -= d d x_l
x ,k ,d = map(int,input().split())

x = abs(x)
c = x // d
# 必要な移動回数
k_r = k - c
# 移動した後の残りの移動回数
ans_2 = x - d * c
#残り移動回数が偶数のときのｘからの距離

if c >= k:
    print(x - k * d )
    exit()

x_l = x - d * c
#ｘまでの残りの距離

if k_r % 2 == 0:
    print(ans_2)
    exit()
else :
    x_l -= d
    x_l =abs(x_l)
    print(x_l)