##C - Walking Takahash
##正負が反転しないなら単調増加、減少
##反転するなら、反転した瞬間で残りの回数が偶数なら、その値、奇数なら、一つ前にの値
X,K,D = map(int,input().split())
##X1の正負フラグがあれば簡潔に書けるかも
if X < 0:
    X = -X
R = K - X // D
if X-K*D >= 0:
    print(X-K*D)
else:
    if R % 2 == 0:
        print(X - D*(X//D))
    else:
        print(abs(X - D*(X//D)-D)) X,K,D = map(int,input().split()) X map(int,input().split()) map int input().split() ().split () input split K D if X < 0:
    X = -X X < 0 X 0 X = -X X -X X R = K - X // D R K - X // D K X // D X D if X-K*D >= 0:
    print(X-K*D)
else:
    if R % 2 == 0:
        print(X - D*(X//D))
    else:
        print(abs(X - D*(X//D)-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 if R % 2 == 0:
        print(X - D*(X//D))
    else:
        print(abs(X - D*(X//D)-D)) R % 2 == 0 R % 2 R 2 0 print(X - D*(X//D)) print X - D*(X//D) X D*(X//D) D X//D X D print(abs(X - D*(X//D)-D)) print abs(X - D*(X//D)-D) abs X - D*(X//D)-D X - D*(X//D) X D*(X//D) D X//D X D D X,K,D = map(int,input().split()) map(int,input().split()) X R = K - X // D K - X // D R X = -X -X X K,D = map(int,input().split()) map(int,input().split()) K D = map(int,input().split()) map(int,input().split()) D
##C - Walking Takahash
##正負が反転しないなら単調増加、減少
##反転するなら、反転した瞬間で残りの回数が偶数なら、その値、奇数なら、一つ前にの値
X,K,D = map(int,input().split())
##X1の正負フラグがあれば簡潔に書けるかも
if X < 0:
    X = -X
R = K - X // D
if X-K*D >= 0:
    print(X-K*D)
else:
    if R % 2 == 0:
        print(X - D*(X//D))
    else:
        print(abs(X - D*(X//D)-D))