#include <bits/stdc++.h>
using namespace std;
set<pair<long long, long long> > myset;
set<pair<long long, long long> >::iterator it;
bool sc[200005];
int main() {
  ios_base::sync_with_stdio(0);
  int t, i, j;
  long long n, k, x;
  cin >> n >> k >> x;
  long long arr[n];
  int neg = 0;
  for (i = 0; i < n; i++) {
    cin >> arr[i];
    if (arr[i] < 0) neg++;
  }
  bool isNeg = false;
  if (neg % 2 == 1) isNeg = true;
  if (isNeg) {
    for (i = 0; i < n; i++)
      myset.insert(pair<long long, long long>(abs(arr[i]), i));
    for (i = 1; i <= k; i++) {
      it = myset.begin();
      pair<long long, long long> tmp = *it;
      myset.erase(it);
      tmp.first += x;
      myset.insert(tmp);
    }
    for (it = myset.begin(); it != myset.end(); it++) {
      pair<long long, long long> tmp = *it;
      long long ind = tmp.second;
      long long num = tmp.first;
      if (arr[ind] < 0)
        arr[ind] = -1 * num;
      else
        arr[ind] = num;
    }
  } else {
    for (i = 0; i < n; i++)
      myset.insert(pair<long long, long long>(abs(arr[i]), i));
    for (i = 1; i <= k; i++) {
      it = myset.begin();
      pair<long long, long long> tmp = *it;
      myset.erase(it);
      if (!isNeg) {
        tmp.first -= x;
        if (tmp.first < 0) {
          sc[tmp.second] = true;
          tmp.first = abs(tmp.first);
          isNeg = true;
        }
      } else
        tmp.first += x;
      myset.insert(tmp);
    }
    for (it = myset.begin(); it != myset.end(); it++) {
      pair<long long, long long> tmp = *it;
      long long ind = tmp.second;
      long long num = tmp.first;
      if (arr[ind] < 0) {
        if (sc[ind])
          arr[ind] = num;
        else
          arr[ind] = -1 * num;
      } else {
        if (sc[ind])
          arr[ind] = -1 * num;
        else
          arr[ind] = num;
      }
    }
  }
  for (i = 0; i < n; i++) cout << arr[i] << " ";
}
