#include <bits/stdc++.h>
using namespace std;
const long long maxn = 2e5 + 5;
long long a[maxn];
bool ne[maxn];
int main() {
  long long n, k, x;
  scanf("%lld %lld %lld", &n, &k, &x);
  long long mi = INT_MAX;
  long long pos = -1;
  bool f = 0;
  for (long long i = 1; i <= n; i++) {
    scanf("%lld", &a[i]);
    if (a[i] < 0) {
      a[i] = -a[i];
      ne[i] = 1;
      f ^= 1;
    }
    if (a[i] < mi) {
      mi = a[i];
      pos = i;
    }
  }
  if (f == 1) {
    set<pair<long long, long long> > st;
    for (long long i = 1; i <= n; i++) st.insert(make_pair(a[i], i));
    while (k--) {
      long long p = st.begin()->second;
      st.erase(st.begin());
      a[p] += x;
      st.insert(make_pair(a[p], p));
    }
    for (long long i = 1; i <= n; i++) {
      if (ne[i])
        printf("%lld ", -a[i]);
      else
        printf("%lld ", a[i]);
    }
    return 0;
  }
  if (mi <= x * k) {
    long long t = mi / x;
    mi -= t * x;
    k -= t;
    if (k) {
      k--;
      mi -= x;
    }
    a[pos] = -mi;
    ne[pos] ^= 1;
    set<pair<long long, long long> > st;
    for (long long i = 1; i <= n; i++) st.insert(make_pair(a[i], i));
    while (k--) {
      long long p = st.begin()->second;
      st.erase(st.begin());
      a[p] += x;
      st.insert(make_pair(a[p], p));
    }
    for (long long i = 1; i <= n; i++) {
      if (ne[i])
        printf("%lld ", -a[i]);
      else
        printf("%lld ", a[i]);
    }
  } else {
    a[pos] -= x * k;
    for (long long i = 1; i <= n; i++)
      if (ne[i])
        printf("%lld ", -a[i]);
      else
        printf("%lld ", a[i]);
  }
  return 0;
}
