# coding: utf-8
x, k, d = map(int,input().split())
x=abs(x)
t=x-k*d
if t>=0:
    ans=t
else:
    l=x//d#一番近いところまでの回数
    p=x%d#一番近いところ
    if (k-l)%2==0:
        ans=p
    else:
        ans=min(abs(p+d), abs(p-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 t=x-k*d t x-k*d x k*d k d if t>=0:
    ans=t
else:
    l=x//d#一番近いところまでの回数
    p=x%d#一番近いところ
    if (k-l)%2==0:
        ans=p
    else:
        ans=min(abs(p+d), abs(p-d)) t>=0 t 0 ans=t ans t l=x//d l x//d x d p=x%d p x%d x d if (k-l)%2==0:
        ans=p
    else:
        ans=min(abs(p+d), abs(p-d)) (k-l)%2==0 (k-l)%2 k-l k l 2 0 ans=p ans p ans=min(abs(p+d), abs(p-d)) ans min(abs(p+d), abs(p-d)) min abs(p+d) abs p+d p d abs(p-d) abs p-d p d print(ans) print ans x, k, d = map(int,input().split()) map(int,input().split()) x k, d = map(int,input().split()) map(int,input().split()) k ans=t t ans ans=p p ans p=x%d x%d p t=x-k*d x-k*d t x=abs(x) abs(x) x l=x//d x//d l d = map(int,input().split()) map(int,input().split()) d ans=min(abs(p+d), abs(p-d)) min(abs(p+d), abs(p-d)) ans
# coding: utf-8
x, k, d = map(int,input().split())
x=abs(x)
t=x-k*d
if t>=0:
    ans=t
else:
    l=x//d#一番近いところまでの回数
    p=x%d#一番近いところ
    if (k-l)%2==0:
        ans=p
    else:
        ans=min(abs(p+d), abs(p-d))
print(ans)