#include <bits/stdc++.h>
using namespace std;
long long n, k, x;
priority_queue<pair<long long, long long>, vector<pair<long long, long long> >,
               greater<pair<long long, long long> > >
    pos;
priority_queue<pair<long long, long long> > neg;
long long val;
pair<long long, long long> a;
void check_pos() {
  while (k && pos.top().first >= 0) {
    k--;
    a = pos.top();
    pos.pop();
    a.first -= x;
    if (a.first < 0) {
      neg.push(a);
      return;
    }
    pos.push(a);
  }
}
void check_neg() {
  while (k && neg.top().first <= 0) {
    k--;
    a = neg.top();
    neg.pop();
    a.first += x;
    if (a.first > 0) {
      pos.push(a);
      return;
    }
    neg.push(a);
  }
}
long long ans[200005];
int main() {
  scanf("%lld", &n);
  scanf("%lld", &k);
  scanf("%lld", &x);
  int negs = 0;
  for (int i = 0; i < n; i++) {
    cin >> val;
    if (val < 0) {
      neg.push(make_pair(val, i));
      negs++;
    } else
      pos.push(make_pair(val, i));
  }
  if (negs % 2 == 0) {
    if (pos.empty()) {
      check_neg();
    } else if (neg.empty()) {
      check_pos();
    } else {
      if (abs(pos.top().first) < abs(neg.top().first)) {
        check_pos();
      } else {
        check_neg();
      }
    }
  }
  while (k--) {
    if (pos.empty() || (pos.top().first >= abs(neg.top().first))) {
      a = neg.top();
      neg.pop();
      a.first -= x;
      neg.push(a);
    } else {
      a = pos.top();
      pos.pop();
      a.first += x;
      pos.push(a);
    }
  }
  while (!pos.empty()) {
    a = pos.top();
    pos.pop();
    ans[a.second] = a.first;
  }
  while (!neg.empty()) {
    a = neg.top();
    neg.pop();
    ans[a.second] = a.first;
  }
  for (int i = 0; i < n; i++) {
    printf("%lld ", ans[i]);
  }
  printf("\n");
  return 0;
}
