Problem:
Score : 300 points

Problem Statement

Takahashi, who lives on the number line, is now at coordinate X. He will make exactly K moves of distance D in the positive or negative direction.

More specifically, in one move, he can go from coordinate x to x + D or x - D.

He wants to make K moves so that the absolute value of the coordinate of the destination will be the smallest possible.

Find the minimum possible absolute value of the coordinate of the destination.

Constraints

-10^{15} \leq X \leq 10^{15}

1 \leq K \leq 10^{15}

1 \leq D \leq 10^{15}

All values in input are integers.

Input

Input is given from Standard Input in the following format:

X K D

Output

Print the minimum possible absolute value of the coordinate of the destination.

Sample Input 1

6 2 4

Sample Output 1

2

Takahashi is now at coordinate 6. It is optimal to make the following moves:

Move from coordinate 6 to (6 - 4 =) 2.

Move from coordinate 2 to (2 - 4 =) -2.

Here, the absolute value of the coordinate of the destination is 2, and we cannot make it smaller.

Sample Input 2

7 4 3

Sample Output 2

1

Takahashi is now at coordinate 7. It is optimal to make, for example, the following moves:

Move from coordinate 7 to 4.

Move from coordinate 4 to 7.

Move from coordinate 7 to 4.

Move from coordinate 4 to 1.

Here, the absolute value of the coordinate of the destination is 1, and we cannot make it smaller.

Sample Input 3

10 1 2

Sample Output 3

8

Sample Input 4

1000000000000000 1000000000000000 1000000000000000

Sample Output 4

1000000000000000

The answer can be enormous.

Solution in C (GCC 9.2.1) (judge verdict: Wrong Answer)

/*
 * main.c
 *
 *  Created on: 2020/03/28
 *      Author: family
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define MAX(a,b) (a > b ? a : b)
#define MIN(a,b) (a > b ? b : a)
#define ABS(a) (a > 0 ? a : (a * -1))
typedef long long int ll;
typedef unsigned long long int ull;

int sort_inc(const void *a, const void *b) { return (*(int*)a - *(int*)b);}
int sort_dec(const void* a, const void* b) { return (*(int*)b - *(int*)a);}
int sort_dec_ll(const void *a, const void *b) {
    ll da = *(ll*)a, db = *(ll*)b;    int val = 0;
    if(da > db) { val = -1; }
    else if (da == db) { val = 0; }
    else { val = 1; }
    return val;
}
int sort_inc_ll(const void *a, const void *b) {
    ll da = *(ll*)a, db = *(ll*)b;    int val = 0;
    if(da > db) { val = 1; }
    else if (da == db) { val = 0; }
    else { val = -1; }
    return val;
}
int sort_dic(const void *a, const void *b) {
    char *pa = (char *)a;    char *pb = (char *)b;    int i = 0, val = 0, N = 10;
    for (i = 0; i < N; i++) {
    	char da = pa[i], db = pb[i];
    	if (da == db) continue;
  		if (da > db) val = 1; else val = -1;
        break;
    }
    return val;
}

void yesno(int ans) {
	if (ans == 1) {	printf("Yes\n");
	} else {		printf("No\n");	}
	return;
}

void okng(int ans) {
	if (ans == 1) { printf("OK\n");
	} else { 		printf("NG\n");	}
	return;
}

int main()
{
	ll X = 0, K = 0, D = 0;
	scanf("%lld %lld %lld", &X, &K, &D);
	ll mv1 = 0, mv2 = 0;
	ll mv3 = 0;
	ll k = 0;
	if (X < 0) {
		k = (X*-1)/D; // min move
	} else {
		k = X/D;
	}
	ll k2 = 0;
	ll k3 = 0;
	ll ans = 0;
	ll dummy = 0;
	if (k > K) {
		mv1 = ABS(X) - (D*K);
		ans = mv1;
	} else {
		dummy = K - k;
		if (dummy%2 == 0) {
			k2 = k + 2;
			k3 = k - 2;
		} else {
			k2 = k + 1;
			k3 = k - 1;
		}
		if (X > 0) {
			mv1 = ABS(X - (D*k));
			mv2 = ABS(X - (D*k2));
			mv3 = ABS(X - (D*k3));
//			printf("K=%lld D=%lld\n", K, D);
//			printf("%lld %lld %lld\n", mv1, mv2, mv3);
		} else {
			mv1 = ABS(X + (D*k));
			mv2 = ABS(X + (D*k2));
			mv3 = ABS(X + (D*k3));
//			printf("K=%lld D=%lld\n", K, D);
//			printf("%lld %lld %lld\n", mv1, mv2, mv3);
		}
		ans = (MIN(MIN(mv1,mv2),mv3));
	}
	printf("%lld\n", ans);
	//yesno(ans);
	//okng(ans);
	return 0;
}