#include <bits/stdc++.h>
using namespace std;
int n, k, x;
typedef long long vt, *pvt;
vector<vt> a;
struct less_first {
  bool operator()(pvt a, pvt b) { return abs(*a) > abs(*b); }
};
priority_queue<pvt, vector<pvt>, less_first> b;
int get() {
  int val = 0, c = ' ', m = 1;
  for (; isspace(c); c = getchar())
    ;
  if (c == '-') m = -1, c = getchar();
  for (; isdigit(c); c = getchar()) val = val * 10 + c - '0';
  return m * val;
}
int sign() {
  int c = 0;
  for (auto v : a) c += (v < 0);
  int r = (c & 1 ? -1 : 1);
  return r;
}
int alg_neg() {
  vt &v = *b.top();
  vt q = abs(v) / x + 1;
  int r = 0;
  if (q <= k) {
    if (v > 0)
      v = v - q * x;
    else if (v < 0)
      v = v + q * x;
    else
      v = -x;
    k -= q, b.pop(), b.push(&v);
    r = 1;
  }
  return r;
}
int alg_zero() {
  int z = 0;
  vt &v = *b.top();
  vt q = abs(v) / x;
  vt r = abs(v) % x;
  if (r == 0 && q <= k) v = 0, z = 1;
  return z;
}
int over_zero() {
  int r = (k < count(a.begin(), a.end(), 0));
  return r;
}
void alg(int dir) {
  while (k--) {
    vt &v = *b.top();
    v += (v >= 0 ? dir * x : -dir * x);
    b.pop();
    b.push(&v);
  }
}
int main() {
  scanf("%d%d%d ", &n, &k, &x);
  a.resize(n);
  for (auto &v : a) v = get(), b.push(&v);
  if (over_zero())
    ;
  else if (sign() < 0)
    alg(1);
  else if (alg_neg())
    alg(1);
  else if (alg_zero())
    ;
  else
    alg(-1);
  for (vt v : a) printf("%lld ", v);
}
