#include <bits/stdc++.h>
using namespace std;
const int maxm = 2e5 + 10;
struct node {
  long long x;
  int y;
  node(long long xx = 0, int yy = 0) {
    x = xx;
    y = yy;
  }
  bool operator<(const node &head) const { return head.x < x; }
};
priority_queue<node> q;
int m, n;
long long w;
long long s[maxm];
int x, y;
int main() {
  int flag = 0;
  scanf("%d%d", &m, &n);
  cin >> w;
  for (int i = 1; i <= m; i++) {
    scanf("%d", &x);
    s[i] = x;
    if (x < 0) {
      flag ^= 1;
      q.push(node(-x, i));
    } else
      q.push(node(x, i));
  }
  if (flag == 0) {
    while (n) {
      int pos = q.top().y;
      q.pop();
      n--;
      if (s[pos] >= 0) {
        s[pos] -= w;
        q.push(node(abs(s[pos]), pos));
        if (s[pos] < 0) {
          flag ^= 1;
          break;
        }
      } else {
        s[pos] += w;
        q.push(node(abs(s[pos]), pos));
        if (s[pos] >= 0) {
          flag ^= 1;
          break;
        }
      }
    }
  }
  while (n) {
    n--;
    int pos = q.top().y;
    q.pop();
    if (s[pos] >= 0)
      s[pos] += w;
    else
      s[pos] -= w;
    q.push(node(abs(s[pos]), pos));
  }
  for (int i = 1; i <= m; i++) cout << s[i] << " ";
  cout << endl;
  return 0;
}
