#include <bits/stdc++.h>
using namespace std;
long long const mod = 998244353;
long long const inf = 1e15;
long long n, m, k, x;
long long w[200004], ans[200004];
pair<long long, long long> t[800003];
void build(long long nd, long long l, long long r) {
  if (l == r) {
    t[nd] = {w[l], l};
    return;
  }
  long long mid = (l + r) / 2;
  build(2 * nd, l, mid);
  build(2 * nd + 1, mid + 1, r);
  if (t[2 * nd].first <= t[2 * nd + 1].first)
    t[nd] = t[2 * nd];
  else
    t[nd] = t[2 * nd + 1];
}
void up(long long nd, long long l, long long r, long long a, long long b) {
  if (a > r || a < l) return;
  if (l == r) {
    t[nd] = {b, a};
    return;
  }
  long long mid = (l + r) / 2;
  up(2 * nd, l, mid, a, b);
  up(2 * nd + 1, mid + 1, r, a, b);
  if (t[2 * nd].first <= t[2 * nd + 1].first)
    t[nd] = t[2 * nd];
  else
    t[nd] = t[2 * nd + 1];
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> k >> x;
  long long d1 = 0, d2 = 0;
  long long mn = 0, mx = n + 1;
  w[0] = inf;
  w[n + 1] = -inf;
  long long v = -1;
  for (int i = 1; i <= n; i++) {
    cin >> w[i];
    if (w[i] == 0) {
      if (v == -1)
        v = i;
      else {
        if (k) {
          w[i] -= x;
          k--;
        }
      }
    }
    if (w[i] > 0) {
      d1++;
      if (w[i] < w[mn]) mn = i;
    } else if (w[i] < 0) {
      d2++;
      if (w[i] > w[mx]) mx = i;
    }
  }
  if (v != -1 && k) {
    if (d2 % 2)
      w[v] = x;
    else
      w[v] = -x, d2++;
    k--;
  }
  if (d2 % 2 == 0) {
    long long dd1, dd2;
    dd1 = dd2 = 1e9;
    if (d1) dd1 = w[mn] / x + 1;
    if (d2) dd2 = (abs(w[mx])) / x + 1;
    if ((dd1 == dd2 && (x - w[mn] % x) >= (x - (abs(w[mx])) % x)) ||
        (dd1 < dd2)) {
      w[mn] -= min(dd1, k) * x;
      k -= min(dd1, k);
    } else {
      w[mx] += min(dd2, k) * x;
      k -= min(dd2, k);
    }
  }
  for (int i = 1; i <= n; i++) ans[i] = w[i], w[i] = abs(w[i]);
  build(1, 1, n);
  for (int ff = 1; ff <= k; ff++) {
    pair<long long, long long> d = t[1];
    if (ans[d.second] > 0)
      ans[d.second] += x;
    else
      ans[d.second] -= x;
    up(1, 1, n, d.second, abs(ans[d.second]));
  }
  for (int i = 1; i <= n; i++) cout << ans[i] << ' ';
  return 0;
}
