#include <bits/stdc++.h>
using namespace std;
struct node {
  long long x;
  int i;
  bool operator<(const node &a) const { return abs(x) > abs(a.x); }
} a[200100];
int main() {
  int n, k, x;
  scanf("%d%d%d", &n, &k, &x);
  long long mi = 10000000000ll;
  int mark = 0, flag = 0;
  for (int i = 1; i <= n; i++) {
    scanf("%I64d", &a[i].x), a[i].i = i;
    if (a[i].x < 0) flag++;
    if (mi > abs(a[i].x)) mi = abs(a[i].x), mark = i;
  }
  if (flag % 2 == 0) {
    if (a[mark].x < 0)
      while (a[mark].x < 0 && k) a[mark].x += x, k--;
    else if (a[mark].x >= 0)
      while (a[mark].x >= 0 && k) a[mark].x -= x, k--;
  }
  priority_queue<node> q;
  for (int i = 1; i <= n; i++) q.push(a[i]);
  while (k) {
    node e = q.top();
    q.pop();
    if (a[e.i].x < 0)
      a[e.i].x -= x;
    else
      a[e.i].x += x;
    q.push(a[e.i]);
    k--;
  }
  for (int i = 1; i < n; i++) cout << a[i].x << " ";
  cout << a[n].x << endl;
  return 0;
}
