#include <bits/stdc++.h>
using namespace std;
struct hehe {
  long long num;
  int id;
  bool operator<(const hehe &n2) const { return abs(num) > abs(n2.num); }
} a[200005];
priority_queue<hehe> pq;
long long n, k, x;
bool cmp1(const hehe &x, const hehe &y) { return x.num < y.num; }
bool cmp2(const hehe &x, const hehe &y) { return x.id < y.id; }
void shuchu() {
  int i;
  sort(a + 1, a + n + 1, cmp2);
  for (i = 1; i <= n - 1; i++) printf("%I64d ", a[i].num);
  printf("%I64d\n", a[i].num);
}
void solve() {
  int i, num1 = 0, num2 = 0, minnid;
  long long minn;
  hehe tmp;
  sort(a + 1, a + n + 1, cmp1);
  for (i = 1; i <= n; i++) {
    if (a[i].num > 0) break;
    if (a[i].num == 0) num2++;
    if (a[i].num < 0) num1++;
  }
  if (num2 > k) {
    shuchu();
    return;
  }
  if (num2 == 0) {
    if (num1 % 2) {
      for (i = 1; i <= n; i++) pq.push(a[i]);
      for (i = 1; i <= k; i++) {
        tmp = pq.top();
        pq.pop();
        if (tmp.num > 0)
          tmp.num += x;
        else
          tmp.num -= x;
        pq.push(tmp);
      }
      for (i = 1; i <= n; i++) {
        a[i] = pq.top();
        pq.pop();
      }
      shuchu();
      return;
    } else {
      if (num1 != 0) {
        for (i = 1; i <= n; i++)
          if (a[i].num < 0) {
            minn = a[i].num;
            minnid = i;
          } else
            break;
        if (i <= n && abs(minn) > a[i].num) {
          minn = a[i].num;
          minnid++;
        }
      } else {
        minn = a[1].num;
        minnid = 1;
      }
      if (abs(minn) >= k * x) {
        if (a[minnid].num > 0)
          a[minnid].num -= k * x;
        else
          a[minnid].num += k * x;
        shuchu();
        return;
      } else {
        long long kk = abs(minn) / x + 1;
        if (a[minnid].num > 0)
          a[minnid].num -= kk * x;
        else
          a[minnid].num += kk * x;
        k -= kk;
        for (i = 1; i <= n; i++) pq.push(a[i]);
        for (i = 1; i <= k; i++) {
          tmp = pq.top();
          pq.pop();
          if (tmp.num > 0)
            tmp.num += x;
          else
            tmp.num -= x;
          pq.push(tmp);
        }
        for (i = 1; i <= n; i++) {
          a[i] = pq.top();
          pq.pop();
        }
        shuchu();
        return;
      }
    }
  }
  if (num1 % 2) {
    for (i = 1; i <= n; i++)
      if (a[i].num == 0) {
        k--;
        a[i].num += x;
      }
    for (i = 1; i <= n; i++) pq.push(a[i]);
    for (i = 1; i <= k; i++) {
      tmp = pq.top();
      pq.pop();
      if (tmp.num > 0)
        tmp.num += x;
      else
        tmp.num -= x;
      pq.push(tmp);
    }
    for (i = 1; i <= n; i++) {
      a[i] = pq.top();
      pq.pop();
    }
    shuchu();
    return;
  } else {
    for (i = 1; i <= n; i++)
      if (a[i].num == 0) {
        a[i].num -= x;
        k--;
        break;
      }
    for (i = 1; i <= n; i++)
      if (a[i].num == 0) {
        a[i].num += x;
        k--;
      }
    for (i = 1; i <= n; i++) pq.push(a[i]);
    for (i = 1; i <= k; i++) {
      tmp = pq.top();
      pq.pop();
      if (tmp.num > 0)
        tmp.num += x;
      else
        tmp.num -= x;
      pq.push(tmp);
    }
    for (i = 1; i <= n; i++) {
      a[i] = pq.top();
      pq.pop();
    }
    shuchu();
    return;
  }
}
int main() {
  int i;
  long long j;
  scanf("%I64d%I64d%I64d", &n, &k, &x);
  for (i = 1; i <= n; i++) {
    scanf("%I64d", &j);
    a[i].num = j;
    a[i].id = i;
  }
  solve();
  return 0;
}
