#include <bits/stdc++.h>
using namespace std;
void solve(vector<long long> &positive, int &k, long long x) {
  priority_queue<pair<long long, pair<long long, int>>,
                 vector<pair<long long, pair<long long, int>>>,
                 greater<pair<long long, pair<long long, int>>>>
      q;
  for (int i = 0; i < positive.size(); i++) {
    q.push(pair<long long, pair<long long, int>>(abs(positive[i]),
                                                 make_pair(positive[i], i)));
  }
  while (k-- > 0) {
    pair<long long, pair<long long, int>> u = q.top();
    q.pop();
    if (u.second.first < 0) {
      q.push(pair<long long, pair<long long, int>>(
          u.first + x, make_pair(u.second.first - x, u.second.second)));
    } else {
      q.push(pair<long long, pair<long long, int>>(
          u.first + x, make_pair(u.second.first + x, u.second.second)));
    }
  }
  while (!q.empty()) {
    pair<long long, pair<long long, int>> u = q.top();
    q.pop();
    positive[u.second.second] = u.second.first;
  }
}
int main() {
  int n, k;
  long long x;
  cin >> n >> k >> x;
  vector<long long> all(n);
  int negative = 0;
  for (int i = 0; i < n; i++) cin >> all[i], negative += all[i] < 0;
  int mn = -1, maxn = -INT_MAX, minp = INT_MAX, mx = -1;
  for (int i = 0; i < n; i++) {
    if (maxn < all[i] && all[i] < 0) {
      mx = i;
      maxn = all[i];
    }
    if (minp > all[i] && all[i] >= 0) {
      mn = i;
      minp = all[i];
    }
  }
  if (negative % 2 == 0) {
    if (abs(all[mx]) > abs(all[mn])) {
      while (all[mn] >= 0 && k) {
        k--;
        all[mn] -= x;
      }
    } else {
      while (all[mx] < 0 && k) {
        k--;
        all[mx] += x;
      }
    }
  }
  solve(all, k, x);
  for (int i = 0; i < n; i++) cout << all[i] << " ";
}
