#include <bits/stdc++.h>
using namespace std;
int N;
vector<long long> v;
struct Cmp {
  bool operator()(int a, int b) { return abs(v[a]) > abs(v[b]); }
};
bool cmp(const int &a, const int &b) { return abs(v[a]) < abs(v[b]); }
void avgOp(vector<long long> &ov, long long K, long long x) {
  priority_queue<int, vector<int>, Cmp> pq;
  for (int i = 0; i < N; i++) pq.push(i);
  while (K) {
    int minId = pq.top();
    pq.pop();
    if (v[minId] > 0)
      v[minId] += x;
    else
      v[minId] -= x;
    pq.push(minId);
    K--;
  }
}
int main() {
  long long K, x;
  scanf("%d %lld %lld", &N, &K, &x);
  v.resize(N);
  for (int i = 0; i < N; i++) scanf("%lld", &v[i]);
  int sign = 1, zeroCnt = 0;
  bool hasZero = false;
  for (int i = 0; i < N; i++) {
    if (v[i] < 0)
      sign *= -1;
    else if (v[i] == 0) {
      hasZero = true;
      zeroCnt++;
    }
  }
  if (sign < 0 && !hasZero)
    avgOp(v, K, x);
  else if (sign > 0 && !hasZero) {
    int minId = 0;
    for (int i = 1; i < N; i++) {
      if (abs(v[i]) < abs(v[minId])) minId = i;
    }
    int oriSign = v[minId] < 0 ? -1 : 1;
    long long need = abs(v[minId]) / x;
    if (abs(v[minId]) % x != 0) need++;
    if (K >= need) {
      if (v[minId] > 0)
        v[minId] -= need * x;
      else
        v[minId] += need * x;
      K -= need;
      if (v[minId] == 0 && K > 0) {
        if (oriSign > 0)
          v[minId] -= x;
        else
          v[minId] += x;
        K--;
      }
      avgOp(v, K, x);
    } else {
      v[minId] -= K * x;
    }
  } else {
    if (K >= zeroCnt) {
      if (sign < 0) {
        for (int i = 0; i < N; i++) {
          if (v[i] == 0) {
            v[i] += x;
            K--;
          }
        }
        avgOp(v, K, x);
      } else {
        bool has = false;
        for (int i = 0; i < N; i++) {
          if (v[i] == 0) {
            if (!has) {
              v[i] -= x;
              has = true;
            } else
              v[i] += x;
            K--;
          }
        }
        avgOp(v, K, x);
      }
    }
  }
  for (int i = 0; i < N; i++) {
    if (i != 0) printf(" ");
    printf("%lld", v[i]);
  }
  printf("\n");
  return 0;
}
