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)

#include<bits/stdc++.h>
#include<string>
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
using namespace std;

#define ff              first
#define ss              second
#define int             long long
#define pb              push_back
#define mp              make_pair
#define pii             pair<int,int>
#define vi              vector<int>
#define mii             map<int,int>
#define pqb             priority_queue<int>
#define pqs             priority_queue<int,vi,greater<int> >
#define setbits(x)      __builtin_popcountll(x)
#define zrobits(x)      __builtin_ctzll(x)
#define mod             1000000007
#define inf             1e18
#define ps(x,y)         fixed<<setprecision(y)<<x
#define mk(arr,n,type)  type *arr=new type[n];
#define w(x)            int x; cin>>x; while(x--)
#define pw(b,p)         pow(b,p) + 0.1
mt19937                 rng(chrono::steady_clock::now().time_since_epoch().count());

typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> pbds;


void c_p_c()
{
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#ifndef ONLINE_JUDGE
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout);
#endif
}

string revzzz(char c,int x){
	string ans="";
	for(;x>0;x--){
		ans+=c;
	}

	return ans;
}
int32_t main()
{
	c_p_c();

		int x,k,d;cin>>x>>k>>d;

		int ans=0;
		int nx = abs(x);
		if(x < 0){

			int ct0 = nx/d;

			if(k<=ct0){
				ans = x+k*d;
			}
			else{
				int rem = k - ct0;
				if(-(x+ct0*d)<x+(ct0+1)*d){
					
					if(rem%2 == 0){
						ans = x+ct0*d;
					}
					else{
						ans = x+(ct0+1)*d;
					}
				}
				else{
					if(rem%2 != 0){
						ans = x+ct0*d;
					}
					else{
						ans = x+(ct0+1)*d;
					}
				}
			}
		}
		else{
			int ct0 = x/d;

			if(k<=ct0){
				ans = x-k*d;
			}
			else{
				int rem = k - ct0;
				// cout<<rem;
				if((x-ct0*d)<-(x-(ct0+1)*d)){
					// cout<<"ki";
					if(rem%2 == 0){
						ans = x-ct0*d;
					}
					else{
						ans = x-(ct0+1)*d;
					}
				}
				else{
					if(rem%2 != 0){
						ans = x-ct0*d;
					}
					else{
						ans = x-(ct0+1)*d;
					}
				}
			}
		}

		cout<<abs(ans)<<'\n';
}