// inputに入力データ全体が入る
function Main(input) {
	// 1行目がinput[0], 2行目がinput[1], …に入る
	const inputLines = input.split("\n");
	const line0 = inputLines[0];
	const line0vars = line0.split(" ");

	var x = parseInt(line0vars[0], 10);
	var k = parseInt(line0vars[1], 10);
	const d = parseInt(line0vars[2], 10);

	if (x < 0) {
		x = x * -1;
	}

	var result = x - k * d;
	if (0 <= result) {
		return console.log(result);
	}

	result = x % d;
	var count = (x - result) / d;
	if (count%2 == k%2) {
		var p = -1 * (result - d * 2);

		// console.log({
		// 	x: x,
		// 	k: k,
		// 	d: d,
		// 	result: result,
		// 	p: p
		// });
	
		if (p < result) {
			result = p;
		}	

		return console.log(result);
	} 

	var a1 = result + d;
	var a2 = Math.abs(result - d);

	// console.log({
	// 	x: x,
	// 	k: k,
	// 	d: d,
	// 	result: result,
	// 	a1: a1,
	// 	a2: a2
	// });

	result = a1;

	if (a2 < result) {
		result = a2;
	}
	console.log(a2);

	

	// tmp = input[1].split(" ");
	// //文字列から10進数に変換するときはparseIntを使います
	// var a = parseInt(input[0], 10);
	// var b = parseInt(tmp[0], 10);
	// var c = parseInt(tmp[1], 10);
	// var s = input[2];

	//出力
	// console.log('%d %s',a+b+c,s);
}
//*この行以降は編集しないでください（標準入出力から一度に読み込み、Mainを呼び出します）
Main(require("fs").readFileSync("/dev/stdin", "utf8"));

// node index.js
// 1
// 2 3
// test
// (Ctrl + D)
