//let input = "100 22 5"; // x k d 初期座標　回数　一度に動ける

function main(input){
  input = input.trim();
  let list = input.split(" ");
  let x = parseInt(list[0]);
  let k = parseInt(list[1]);
  let d = parseInt(list[2]);
  let kaisuu = Math.floor(x/d); // ０を過ぎずに最も接近できる回数
  if(kaisuu>k){ // kを超えてしまったらkaisuuはk
    kaisuu=k;
  }
  let nokoriKaisuu = k - kaisuu;
  if(nokoriKaisuu%2===0){ // 残り回数が偶数のとき
    // 何もしない
  }else if(nokoriKaisuu%2===1){ // 残り回数が奇数のとき
    if(0 < x - d*kaisuu){ // kaisuu回移動したとき、xが正
      kaisuu+=1;
    }else{ // xが０か負
      kaisuu-=1;
    }
  }
  let answer = Math.abs(x - d*kaisuu);
  console.log(answer);
}
//main(input);
main(require("fs").readFileSync("/dev/stdin", "utf8"));
