#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000000007LL;
template <class T>
void printImpl(const vector<T>& coll) {
  copy(coll.begin(), coll.end(), ostream_iterator<T>(cout, " "));
  cout << endl;
}
template <class T, int N>
void printImpl(T (&coll)[N]) {
  copy(coll, coll + N, ostream_iterator<T>(cout, " "));
  cout << endl;
}
template <class Key, class Value>
void printImpl(const map<Key, Value>& data) {
  typename map<Key, Value>::const_iterator it;
  for (it = data.begin(); it != data.end(); ++it) {
    cout << it->first << ":" << it->second << endl;
  }
}
template <class T>
void printImpl(const T& data) {
  cout << data << endl;
}
const long long INF = 1e9 + 1;
void solve_neg(vector<long long> a, long long K, long long X) {
  int N = a.size();
  multiset<pair<long long, int> > data;
  for (int i = 0; i < (N); ++i) {
    data.insert(make_pair(abs(a[i]), i));
  }
  for (int k = 0; k < K; ++k) {
    pair<long long, int> firstElem = *data.begin();
    data.erase(data.begin());
    data.insert(make_pair(firstElem.first + X, firstElem.second));
  }
  vector<long long> res(N);
  vector<pair<long long, int> > data_v(data.begin(), data.end());
  for (int i = 0; i < (N); ++i) {
    res[data_v[i].second] = data_v[i].first;
    if (a[data_v[i].second] < 0) res[data_v[i].second] = -res[data_v[i].second];
  }
  for (int i = 0; i < (N); ++i) {
    cout << res[i] << " ";
  }
  cout << endl;
}
int main() {
  int N;
  long long K, X;
  cin >> N >> K >> X;
  int cNeg = 0, cZero = 0, cPos = 0;
  vector<long long> a(N);
  for (int i = 0; i < (N); ++i) {
    cin >> a[i];
    if (a[i] > 0) cPos++;
    if (a[i] == 0) cZero++;
    if (a[i] < 0) cNeg++;
  }
  if (cNeg % 2) {
    solve_neg(a, K, X);
    return 0;
  }
  if (cNeg == 0) {
    bool canNeg = false, canZero = false;
    for (int i = 0; i < (N); ++i) {
      if (a[i] - X * K < 0) canNeg = true;
      if (a[i] - X * K == 0) canZero = true;
    }
    if (canNeg) {
      int minIx = 0;
      long long minElem = a[0];
      for (int i = 0; i < (N); ++i) {
        if (a[i] < minElem) {
          minIx = i;
          minElem = a[i];
        }
      }
      long long k_used = minElem / X + 1;
      a[minIx] -= k_used * X;
      K -= k_used;
      solve_neg(a, K, X);
      return 0;
    }
    if (canZero) {
      for (int i = 0; i < N; ++i) {
        if (a[i] == K * X) {
          a[i] = 0;
          break;
        }
      }
      for (int i = 0; i < (N); ++i) {
        cout << a[i] << " ";
      }
      cout << endl;
      return 0;
    }
    int minIx = 0;
    long long minElem = a[0];
    for (int i = 0; i < (N); ++i) {
      if (a[i] < minElem) {
        minIx = i;
        minElem = a[i];
      }
    }
    a[minIx] -= K * X;
    for (int i = 0; i < (N); ++i) {
      cout << a[i] << " ";
    }
    cout << endl;
    return 0;
  }
  if (cPos == 0) {
    if (cZero) {
      for (int i = 0; i < (N); ++i) {
        if (a[i] == 0) {
          a[i] -= X;
          solve_neg(a, K - 1, X);
          return 0;
        }
      }
    }
    bool canPos = false, canZero = false;
    for (int i = 0; i < (N); ++i) {
      if (a[i] + X * K > 0) canPos = true;
      if (a[i] - X * K == 0) canZero = true;
    }
    if (canPos) {
      int maxIx = 0;
      long long maxElem = a[0];
      for (int i = 0; i < (N); ++i) {
        if (a[i] > maxElem) {
          maxIx = i;
          maxElem = a[i];
        }
      }
      long long k_used = abs(maxElem) / X + 1;
      a[maxIx] += k_used * X;
      K -= k_used;
      solve_neg(a, K, X);
      return 0;
    }
    if (canZero) {
      for (int i = 0; i < N; ++i) {
        if (a[i] + K * X == 0) {
          a[i] = 0;
          break;
        }
      }
      printImpl(a);
      return 0;
    }
    int maxIx = 0;
    long long maxElem = a[0];
    for (int i = 0; i < (N); ++i) {
      if (a[i] < maxElem) {
        maxIx = i;
        maxElem = a[i];
      }
    }
    a[maxIx] += K * X;
    printImpl(a);
    return 0;
  }
  if (cZero) {
    for (int i = 0; i < (N); ++i) {
      if (a[i] == 0) {
        a[i] -= X;
        solve_neg(a, K - 1, X);
        return 0;
      }
    }
  }
  int minIx = -1;
  int maxIx = -1;
  for (int i = 0; i < (N); ++i) {
    if (a[i] > 0) {
      if (minIx == -1 || a[i] < a[minIx]) {
        minIx = i;
      }
    }
    if (a[i] < 0) {
      if (maxIx == -1 || a[i] > a[maxIx]) {
        maxIx = i;
      }
    }
  }
  if (a[minIx] + a[maxIx] > 0) {
    if (a[maxIx] + K * X > 0) {
      long long k_used = abs(a[maxIx]) / X + 1;
      a[maxIx] += k_used * X;
      K -= k_used;
      solve_neg(a, K, X);
      return 0;
    }
    a[maxIx] += K * X;
    printImpl(a);
    return 0;
  } else {
    if (a[minIx] - K * X < 0) {
      long long k_used = abs(a[minIx]) / X + 1;
      a[minIx] -= k_used * X;
      K -= k_used;
      solve_neg(a, K, X);
      return 0;
    }
    a[minIx] -= K * X;
    printImpl(a);
    return 0;
  }
  return 0;
}
