"use strict"
const create = () => {
    const input = require("fs").readFileSync("/dev/stdin", "utf8").trim().split("\n");
    const res = {
        "list": input, "index": 0, "max": input.length,
        "hasNext": function() {return this.index < this.max},
        "next": function() { if (!this.hasNext()) {throw "ArrayIndexOutOfBoundsException";}else{return this.list[this.index++];}}
    };
    return res;
}
const o = create();
const next = () => o.next()
const nextInt = () => parseInt(o.next())
const nextStrArray = () => o.next().split(" ")
const nextIntArray = () => o.next().split(" ").map(el => parseInt(el))
const nextCharArray = () => o.next().split("")
const hasNext = () => o.hasNext()
const myout = (...x) => console.log(...x)
const Main = () => {
    let [x,k,d] = next().split(" ")
    let xx = BigInt(x)
    xx = xx > 0 ? xx: -1n*xx
    let kk = BigInt(k)
    let dd = BigInt(d)
    let div = xx / dd
    let ans 
    if(div >= kk){
        ans = xx - kk * dd
    }else{
        // odd
        if(div % 2n != 0n){
            let rem = xx % dd
            ans = -1n*(rem - dd)
        // even
        }else{
            ans = xx % dd
        }

    }
    console.log(String(ans))

}
Main()
