import Data.List

main = do
  li <- getLine
  let [x,k,d] = map read $ words li
  print $ compute x k d

compute :: Int -> Int -> Int -> Int
compute x k d
  | k <= k0 = x1 - k * d
  | even k1 = r0
  | True    = d - r0
  where
    x1 = abs x
    (k0,r0) = divMod x1 d
    k1 = k - k0

{-
k0回移動して残りr0のところまで行ける。k= k0ならそこまでしかいけない。
残りk1回の移動が偶数ならr0、奇数なら反対側のr1で終わる。
-}