#include <bits/stdc++.h>
using namespace std;
template <typename Arg1>
void __f(const char* name, Arg1&& arg1) {
  std::cerr << name << " : " << arg1 << '\n';
}
template <typename Arg1, typename... Args>
void __f(const char* names, Arg1&& arg1, Args&&... args) {
  const char* comma = strchr(names + 1, ',');
  std::cerr.write(names, comma - names) << " : " << arg1 << " | ";
  __f(comma + 1, args...);
}
const long long int mxx = 200005, INFF = 1e9;
long long int n, k, x, a[mxx], no_neg = 0, no_zero = 0;
priority_queue<pair<long long int, long long int> > q;
void print_array() {
  for (long long int i = 0; i < n; i++) cout << a[i] << " ";
  return;
}
void operate(long long int ind) {
  if (a[ind] < 0)
    a[ind] -= x;
  else
    a[ind] += x;
  k--;
}
void minimize() {
  while (k) {
    pair<long long int, long long int> temp = q.top();
    q.pop();
    operate(temp.second);
    q.push(make_pair(-1 * abs(a[temp.second]), temp.second));
  }
}
void solve() {
  cin >> n >> k >> x;
  for (long long int i = 0; i < n; i++) {
    cin >> a[i];
    q.push(make_pair(-1 * abs(a[i]), i));
    if (a[i] < 0) no_neg++;
    if (a[i] == 0) no_zero++;
  }
  if (no_zero > k) {
    print_array();
    return;
  }
  if (no_neg % 2 == 1) {
    minimize();
    print_array();
    return;
  } else {
    long long int temp_ind = q.top().second;
    if (abs(a[temp_ind]) >= k * x) {
      a[temp_ind] -= k * x * (-1 * (a[temp_ind] < 0) + 1 * (a[temp_ind] > 0));
      print_array();
      return;
    }
    q.pop();
    if (a[temp_ind] >= 0) {
      while (a[temp_ind] >= 0) {
        a[temp_ind] -= x;
        k--;
      }
    } else {
      while (a[temp_ind] < 0) {
        a[temp_ind] += x;
        k--;
      }
    }
    q.push(make_pair(-1 * abs(a[temp_ind]), temp_ind));
    minimize();
    print_array();
  }
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long int t = 1;
  while (t--) {
    solve();
  }
  return 0;
}
