#include <bits/stdc++.h>
using namespace std;
struct skaitlis {
  long long vertiba;
  bool pozitivs;
  long long indekss;
};
bool sakarto_pec_vertibam(const skaitlis &kreisais, const skaitlis &labais) {
  return kreisais.vertiba < labais.vertiba;
}
bool sakarto_pec_indeksiem(const skaitlis &kreisais, const skaitlis &labais) {
  return kreisais.indekss < labais.indekss;
}
void apmaina_sk(skaitlis &a, skaitlis &b) {
  skaitlis tmp;
  tmp.indekss = a.indekss;
  tmp.pozitivs = a.pozitivs;
  tmp.vertiba = a.vertiba;
  a.indekss = b.indekss;
  a.pozitivs = b.pozitivs;
  a.vertiba = b.vertiba;
  b.indekss = tmp.indekss;
  b.pozitivs = tmp.pozitivs;
  b.vertiba = tmp.vertiba;
}
void parkarto(skaitlis skaitli[], long long skaitlu_sk) {
  long long vecaka_indekss;
  long long kreisa_b_indekss;
  long long laba_b_indekss;
  vecaka_indekss = 0;
  kreisa_b_indekss = 1;
  laba_b_indekss = 2;
  while (kreisa_b_indekss < skaitlu_sk) {
    if (laba_b_indekss == skaitlu_sk ||
        skaitli[kreisa_b_indekss].vertiba <= skaitli[laba_b_indekss].vertiba) {
      if (skaitli[vecaka_indekss].vertiba > skaitli[kreisa_b_indekss].vertiba) {
        apmaina_sk(skaitli[vecaka_indekss], skaitli[kreisa_b_indekss]);
        vecaka_indekss = kreisa_b_indekss;
      } else
        break;
    } else {
      if (skaitli[vecaka_indekss].vertiba > skaitli[laba_b_indekss].vertiba) {
        apmaina_sk(skaitli[vecaka_indekss], skaitli[laba_b_indekss]);
        vecaka_indekss = laba_b_indekss;
      } else
        break;
    }
    kreisa_b_indekss = vecaka_indekss * 2 + 1;
    laba_b_indekss = vecaka_indekss * 2 + 2;
  }
}
void maksimilizacija(skaitlis skaitli[], long long skaitlu_sk,
                     long long atl_op_sk, long long operaciju_skaitlis) {
  sort(skaitli, skaitli + skaitlu_sk, sakarto_pec_vertibam);
  while (atl_op_sk > 0) {
    skaitli[0].vertiba += operaciju_skaitlis;
    atl_op_sk--;
    parkarto(skaitli, skaitlu_sk);
  }
}
int main() {
  long long skaitlu_sk;
  long long maks_op_sk;
  long long operaciju_skaitlis;
  skaitlis *skaitli;
  long long cur_skaitlis;
  int poz_skaits = 0;
  int neg_skaits = 0;
  skaitlis *mazakais = NULL;
  long long atl_op_sk;
  bool Vajag_Maks = false;
  cin >> skaitlu_sk >> maks_op_sk >> operaciju_skaitlis;
  skaitli = new skaitlis[skaitlu_sk];
  for (long long i = 0; i < skaitlu_sk; i++) {
    cin >> cur_skaitlis;
    if (cur_skaitlis >= 0) {
      poz_skaits++;
      skaitli[i].vertiba = cur_skaitlis;
      skaitli[i].pozitivs = true;
    } else if (cur_skaitlis < 0) {
      neg_skaits++;
      cur_skaitlis = -1 * cur_skaitlis;
      skaitli[i].vertiba = cur_skaitlis;
      skaitli[i].pozitivs = false;
    }
    skaitli[i].indekss = i;
    if (mazakais == NULL || cur_skaitlis < mazakais->vertiba)
      mazakais = &skaitli[i];
  }
  atl_op_sk = maks_op_sk;
  if (neg_skaits % 2 != 0) {
    Vajag_Maks = true;
  } else {
    if (mazakais->vertiba < operaciju_skaitlis * maks_op_sk) {
      atl_op_sk = maks_op_sk - (mazakais->vertiba / operaciju_skaitlis) - 1;
      mazakais->vertiba =
          mazakais->vertiba % operaciju_skaitlis - operaciju_skaitlis;
      mazakais->vertiba *= -1;
      if (mazakais->pozitivs)
        mazakais->pozitivs = false;
      else
        mazakais->pozitivs = true;
      Vajag_Maks = true;
    } else {
      mazakais->vertiba -= operaciju_skaitlis * maks_op_sk;
    }
  }
  if (Vajag_Maks && atl_op_sk > 0) {
    maksimilizacija(skaitli, skaitlu_sk, atl_op_sk, operaciju_skaitlis);
    sort(skaitli, skaitli + skaitlu_sk, sakarto_pec_indeksiem);
  }
  for (long long i = 0; i < skaitlu_sk; i++) {
    if (!skaitli[i].pozitivs) skaitli[i].vertiba *= -1;
    cout << skaitli[i].vertiba << " ";
  }
  cout << endl;
  delete[] skaitli;
  return 0;
}
