#入力:N,M(int:整数)
def input2():
	return map(int,input().split())

x,k,d=input2()
abs_x=abs(x)
count=min(abs_x//d,k) #移動回数
abs_x-=d*count #到達点
rem=k-count


if rem>0:
	if rem%2==1:
		abs_x-=d #abs_x>=0は自明なので，-でok

ans=abs(abs_x)
print(ans) def input2():
	return map(int,input().split()) input2 return map(int,input().split()) map(int,input().split()) map int input().split() ().split () input split x,k,d=input2() x input2() input2 k d abs_x=abs(x) abs_x abs(x) abs x count=min(abs_x//d,k) count min(abs_x//d,k) min abs_x//d abs_x d k abs_x-=d*count abs_x d*count d count rem=k-count rem k-count k count if rem>0:
	if rem%2==1:
		abs_x-=d #abs_x>=0は自明なので，-でok rem>0 rem 0 if rem%2==1:
		abs_x-=d #abs_x>=0は自明なので，-でok rem%2==1 rem%2 rem 2 1 abs_x-=d abs_x d ans=abs(abs_x) ans abs(abs_x) abs abs_x print(ans) print ans abs_x-=d d abs_x rem=k-count k-count rem count=min(abs_x//d,k) min(abs_x//d,k) count d=input2() input2() d def input2():
	return map(int,input().split()) def input2():
	return map(int,input().split()) input2 abs_x=abs(x) abs(x) abs_x abs_x-=d*count d*count abs_x k,d=input2() input2() k ans=abs(abs_x) abs(abs_x) ans x,k,d=input2() input2() x
#入力:N,M(int:整数)
def input2():
	return map(int,input().split())

x,k,d=input2()
abs_x=abs(x)
count=min(abs_x//d,k) #移動回数
abs_x-=d*count #到達点
rem=k-count


if rem>0:
	if rem%2==1:
		abs_x-=d #abs_x>=0は自明なので，-でok

ans=abs(abs_x)
print(ans)