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

# x:位置　k：回数　d:距離

#往復に辿りつく前に終わるパターン
if(abs(x)-d*k >= 0):
    print(abs(abs(x)-d*k))
#0またいで往復するパターン
else:
    #往復直前までにかかる回数
    r_count = abs(x)//d
 
    #残り捜査回数
    rest = k - r_count

    #残り回数の奇遇によって計算を判断
    #残り回数が偶数の時はr_count分動かした時と変わらない
    if(rest %2 == 0):
        print(abs(abs(x) - d*r_count))
    #残り回数が奇数:さらにD移動した分？
    else:
        print(abs(abs(abs(x) - d*r_count)-d))


#通らない.....


 import sys sys x,k,d = map(int,input().split()) x map(int,input().split()) map int input().split() ().split () input split k d if(abs(x)-d*k >= 0):
    print(abs(abs(x)-d*k))
#0またいで往復するパターン
else:
    #往復直前までにかかる回数
    r_count = abs(x)//d
 
    #残り捜査回数
    rest = k - r_count

    #残り回数の奇遇によって計算を判断
    #残り回数が偶数の時はr_count分動かした時と変わらない
    if(rest %2 == 0):
        print(abs(abs(x) - d*r_count))
    #残り回数が奇数:さらにD移動した分？
    else:
        print(abs(abs(abs(x) - d*r_count)-d))


#通らない..... abs(x)-d*k >= 0 abs(x)-d*k abs(x) abs x d*k d k 0 print(abs(abs(x)-d*k)) print abs(abs(x)-d*k) abs abs(x)-d*k abs(x) abs x d*k d k r_count = abs(x)//d r_count abs(x)//d abs(x) abs x d rest = k - r_count rest k - r_count k r_count if(rest %2 == 0):
        print(abs(abs(x) - d*r_count))
    #残り回数が奇数:さらにD移動した分？
    else:
        print(abs(abs(abs(x) - d*r_count)-d))


#通らない..... rest %2 == 0 rest %2 rest 2 0 print(abs(abs(x) - d*r_count)) print abs(abs(x) - d*r_count) abs abs(x) - d*r_count abs(x) abs x d*r_count d r_count print(abs(abs(abs(x) - d*r_count)-d)) print abs(abs(abs(x) - d*r_count)-d) abs abs(abs(x) - d*r_count)-d abs(abs(x) - d*r_count) abs abs(x) - d*r_count abs(x) abs x d*r_count d r_count d rest = k - r_count k - r_count rest k,d = map(int,input().split()) map(int,input().split()) k d = map(int,input().split()) map(int,input().split()) d r_count = abs(x)//d abs(x)//d r_count x,k,d = map(int,input().split()) map(int,input().split()) x
import sys
x,k,d = map(int,input().split())

# x:位置　k：回数　d:距離

#往復に辿りつく前に終わるパターン
if(abs(x)-d*k >= 0):
    print(abs(abs(x)-d*k))
#0またいで往復するパターン
else:
    #往復直前までにかかる回数
    r_count = abs(x)//d
 
    #残り捜査回数
    rest = k - r_count

    #残り回数の奇遇によって計算を判断
    #残り回数が偶数の時はr_count分動かした時と変わらない
    if(rest %2 == 0):
        print(abs(abs(x) - d*r_count))
    #残り回数が奇数:さらにD移動した分？
    else:
        print(abs(abs(abs(x) - d*r_count)-d))


#通らない.....



