#include <bits/stdc++.h>
using namespace std;
const long long INF = 1e18 + 7;
long long a[200007];
struct Node {
  long long val;
  int pos, flag;
};
int n, k;
long long x;
bool operator<(const Node p, const Node q) { return p.val > q.val; }
void awsn() {
  priority_queue<Node> q;
  Node gg;
  for (int i = 0; i < n; i++) {
    if (a[i] < 0) {
      gg.flag = 0;
      gg.val = -a[i];
    } else {
      gg.val = a[i];
      gg.flag = 1;
    }
    gg.pos = i;
    q.push(gg);
  }
  for (int i = 0; i < k; i++) {
    gg = q.top();
    q.pop();
    gg.val += x;
    if (gg.flag)
      a[gg.pos] += x;
    else
      a[gg.pos] -= x;
    q.push(gg);
  }
}
int main() {
  while (~scanf("%d%d%I64d", &n, &k, &x)) {
    Node gg;
    int ocnt = 0, ncnt = 0;
    ;
    int npos, ppos, opos;
    long long nmin = -INF, pmin = INF;
    for (int i = 0; i < n; i++) {
      scanf("%I64d", &a[i]);
      if (a[i] < 0) {
        ncnt++;
        if (a[i] > nmin) {
          npos = i;
          nmin = a[i];
        }
      } else if (a[i] > 0) {
        if (a[i] < pmin) {
          ppos = i;
          pmin = a[i];
        }
      } else {
        ocnt++;
        opos = i;
      }
    }
    if (n == 1) {
      printf("%I64d\n", a[0] -= k * x);
      continue;
    } else if (ncnt % 2 == 0) {
      if (ocnt) {
        k--;
        a[opos] -= x;
        awsn();
      } else {
        if (pmin > -nmin) {
          long long ttt = nmin;
          if (ttt + k * x <= 0)
            a[npos] += k * x;
          else {
            int sb = (0 - nmin) / x + 1;
            a[npos] += sb * x;
            k -= sb;
            awsn();
          }
        } else {
          long long ttt = pmin;
          if (ttt - k * x >= 0)
            a[ppos] -= k * x;
          else {
            int sb = pmin / x + 1;
            a[ppos] -= sb * x;
            k -= sb;
            awsn();
          }
        }
      }
    } else
      awsn();
    for (int i = 0; i < n; i++) {
      printf("%I64d", a[i]);
      printf(i == n - 1 ? "\n" : " ");
    }
  }
  return 0;
}
