func readThreeInts(separator: String.Element = " ") -> (a: Int, b: Int, c: Int) {
    let ints = readLine()!.split(separator: separator).map { Int($0)! }
    return (a: ints[0], b: ints[1], c: ints[2])
}

func mainC() {
    let (X, K, D) = readThreeInts()

    var position = X
    for i in 1...K {
        if abs(position - D) < abs(position) {
            position -= D
        } else if abs(position + D) < abs(position) {
            position += D
        } else {
            // 絶対値が大きくなってしまう場合
            let remain = K - i + 1
            // 2の倍数なら+D, -Dをし続けて消化できる
            if remain.isMultiple(of: 2) {
                break
            } else {
                // 2の倍数じゃないならより大きくならない方に移動して終わる
                if position >= 0 {
                    position -= D
                } else if position <= 0 {
                    position += D
                } else {
                    fatalError()
                }

                break
            }
        }
    }

    print(abs(position))
}
mainC()