#include <bits/stdc++.h>
using namespace std;
const int maxn = 4e5 + 10;
const int INF = 1e9 + 1000;
void read(int &val) {
  int x = 0;
  int bz = 1;
  char c;
  for (c = getchar(); (c < '0' || c > '9') && c != '-'; c = getchar())
    ;
  if (c == '-') {
    bz = -1;
    c = getchar();
  }
  for (; c >= '0' && c <= '9'; c = getchar()) x = x * 10 + c - 48;
  val = x * bz;
}
struct segtree {
  int l, r, val;
} N[1];
void pushup(int root) {}
void build(int root, int l, int r) {
  N[root].l = l;
  N[root].r = r;
  N[root].val = 0;
  if (l == r) return;
  int m = (l + r) >> 1;
  build(root << 1, l, m);
  build(root << 1 | 1, m + 1, r);
}
int n, k, x;
struct node {
  long long id, val;
  bool operator<(const node b) const { return abs(val) > abs(b.val); }
} a[maxn];
long long b[maxn];
priority_queue<node> q;
void solve() {
  for (int i = 1; i <= k; i++) {
    node top = q.top();
    q.pop();
    if (top.val < 0)
      top.val -= x;
    else
      top.val += x;
    q.push(top);
  }
  while (!q.empty()) {
    node top = q.top();
    q.pop();
    b[top.id] = top.val;
  }
}
int main() {
  long long mi = INF;
  read(n);
  read(k);
  read(x);
  int cnt = 0;
  for (int i = 1; i <= n; i++) {
    scanf("%lld", &a[i].val);
    mi = min(abs(a[i].val), mi);
    if (a[i].val < 0) cnt++;
    a[i].id = i;
  }
  if (cnt & 1) {
    for (int i = 1; i <= n; i++) q.push(a[i]);
    solve();
    for (int i = 1; i <= n; i++) printf("%lld ", b[i]);
    printf("\n");
    return 0;
  }
  if ((long long)x * k <= mi) {
    for (int i = 1; i <= n; i++) {
      if (abs(a[i].val) == mi) {
        if (a[i].val > 0)
          a[i].val -= x * k;
        else
          a[i].val += x * k;
        break;
      }
    }
    for (int i = 1; i <= n; i++) printf("%lld ", a[i].val);
    printf("\n");
  } else {
    long long m = 0;
    for (int i = 1; i <= n; i++) {
      if (abs(a[i].val) == mi) {
        if (a[i].val == 0) {
          m = 1;
          a[i].val -= x;
          k--;
        } else if (a[i].val > 0) {
          m = a[i].val / x + 1;
          a[i].val -= m * x;
          k -= m;
        } else {
          m = -a[i].val / x + 1;
          a[i].val += m * x;
          k -= m;
        }
        break;
      }
    }
    for (int i = 1; i <= n; i++) q.push(a[i]);
    solve();
    for (int i = 1; i <= n; i++) {
      printf("%lld ", b[i]);
    }
    printf("\n");
  }
  return 0;
}
