#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5 + 7;
long long a[MAXN];
int n, k, x;
void print() {
  for (int i = 1; i <= n; ++i) cout << a[i] << ' ';
  exit(0);
}
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  cin >> n >> k >> x;
  vector<int> zeros;
  int n_pos = 0, n_neg = 0, n_zer = 0;
  for (int i = 1; i <= n; ++i) {
    cin >> a[i];
    if (a[i] > 0) ++n_pos;
    if (a[i] < 0) ++n_neg;
    if (a[i] == 0) ++n_zer, zeros.push_back(i);
  }
  if (n_zer) {
    if (n_zer > k) print();
    if ((n_zer & 1) == (n_neg & 1))
      a[zeros.back()] += 1LL * x, zeros.pop_back(), ++n_pos, --k;
    for (auto v : zeros) a[v] -= 1LL * x, ++n_neg, --k;
  }
  set<pair<long long, int> > s;
  for (int i = 1; i <= n; ++i) s.insert({abs(a[i]), i});
  if ((n_neg & 1) == 0) {
    int id = s.begin()->second;
    bool save = (a[id] > 0);
    s.erase(s.begin());
    while (k && (a[id] == 0 || ((a[id] > 0) == save))) {
      if (save)
        a[id] -= 1LL * x;
      else
        a[id] += 1LL * x;
      --k;
    }
    if (k == 0) print();
    s.insert({abs(a[id]), id});
  }
  while (k--) {
    int id = s.begin()->second;
    s.erase(s.begin());
    if (a[id] > 0)
      a[id] += 1LL * x;
    else
      a[id] -= 1LL * x;
    s.insert({abs(a[id]), id});
  }
  print();
  return 0;
}
