#include <bits/stdc++.h>
using namespace std;
template <typename T>
T abs(const T &val) {
  return (val < 0) ? -val : val;
}
struct IndexNum {
  long long value;
  int index;
  IndexNum(long long v, int i) {
    value = v;
    index = i;
  }
  bool operator<(const IndexNum &rhs) const {
    if (abs(value) < abs(rhs.value)) {
      return true;
    } else if (abs(value) > abs(rhs.value)) {
      return false;
    } else {
      return index < rhs.index;
    }
  }
};
int main() {
  std::ios::sync_with_stdio(false);
  int N, K, X;
  cin >> N >> K >> X;
  int neg = 0;
  set<IndexNum> s;
  for (int i = 0; i < N; i++) {
    long long A;
    cin >> A;
    if (A < 0) {
      neg++;
    }
    s.insert(IndexNum(A, i));
  }
  for (int i = 0; i < K; i++) {
    auto sm = s.begin();
    s.erase(sm);
    IndexNum curr = *sm;
    if (neg % 2 == 0) {
      if (curr.value < 0) {
        if (curr.value >= -X) {
          neg--;
        }
        curr.value += X;
      } else {
        if (curr.value < X) {
          neg++;
        }
        curr.value -= X;
      }
    } else {
      if (curr.value < 0) {
        curr.value -= X;
      } else {
        curr.value += X;
      }
    }
    s.insert(curr);
  }
  long long B[N];
  for (auto &it : s) {
    B[it.index] = it.value;
  }
  for (auto &val : B) {
    cout << val << " ";
  }
  cout << endl;
  return 0;
}
