#include <bits/stdc++.h>
using namespace std;
const int N = 200005;
long long n, k, x, ara[N];
multiset<pair<long long, long long>> pos, neg;
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(nullptr);
  cin >> n >> k >> x;
  for (int i = 1; i <= n; i++) {
    cin >> ara[i];
    if (ara[i] < 0)
      neg.insert({-ara[i], i});
    else
      pos.insert({ara[i], i});
  }
  while (k > 0) {
    k = k - 1;
    if (neg.size() % 2 == 1) {
      pair<long long, long long> x1 = *neg.begin();
      pair<long long, long long> x2 = make_pair(1e18, 0LL);
      if (pos.size() > 0) x2 = *pos.begin();
      if (x1.first < x2.first) {
        neg.erase(neg.begin());
        neg.insert({x1.first + x, x1.second});
      } else {
        pos.erase(pos.begin());
        pos.insert({x2.first + x, x2.second});
      }
    } else {
      pair<long long, long long> x1 = make_pair(1e18, 0LL);
      pair<long long, long long> x2 = make_pair(1e18, 0LL);
      if (neg.size() > 0) x1 = *neg.begin();
      if (pos.size() > 0) x2 = *pos.begin();
      if (x1.first < x2.first) {
        neg.erase(neg.begin());
        if (x1.first - x <= 0)
          pos.insert({((x1.first - x) < 0 ? -(x1.first - x) : (x1.first - x)),
                      x1.second});
        else
          neg.insert({((x1.first - x) < 0 ? -(x1.first - x) : (x1.first - x)),
                      x1.second});
      } else {
        pos.erase(pos.begin());
        if (x2.first - x < 0)
          neg.insert({((x2.first - x) < 0 ? -(x2.first - x) : (x2.first - x)),
                      x2.second});
        else
          pos.insert({((x2.first - x) < 0 ? -(x2.first - x) : (x2.first - x)),
                      x2.second});
      }
    }
  }
  for (pair<long long, long long> p : pos) {
    ara[p.second] = p.first;
  }
  for (pair<long long, long long> p : neg) {
    ara[p.second] = -p.first;
  }
  for (int i = 1; i <= n; i++) cout << ara[i] << " ";
}
