import java.math.BigDecimal
import java.math.BigInteger
import kotlin.math.abs

fun main() {
  val (X, K, D) = readLongs() // 初期値e15, 移動回数e15, 移動量e15
  val x = BigInteger.valueOf(abs(X))
  val k = BigInteger.valueOf(K)
  val d = BigInteger.valueOf(D)

  if (x > k * d) {
    println(x - k * d)
    return
  }

  val a = x / d // over しない最小回数
  val b = a + BigInteger.valueOf(1) // over する最小回数
  val da = x - d * a // over しない距離
  val db = d * b - x // over する距離

  if (K % 2 == 0L) {
    if (a % BigInteger.valueOf(2) == BigInteger.valueOf(0)) {
      println(da)
    } else {
      println(db)
    }
  } else {
    if (a % BigInteger.valueOf(2) == BigInteger.valueOf(1)) {
      println(da)
    } else {
      println(db)
    }
  }
}

fun readString() = readLine()!!
fun readStrings() = readString().split(" ")
fun readInt() = readString().toInt()
fun readLong() = readString().toLong()
fun readInts() = readStrings().map { it.toInt() }
fun readLongs() = readStrings().map { it.toLong() }
