#include <bits/stdc++.h>
using namespace std;
int main() {
  int N;
  int64_t P, T[100000];
  cin >> N >> P;
  for (int i = 0; i < N; i++) scanf("%lld", &T[i]);
  int64_t ans[100000];
  priority_queue<vector<int64_t>, vector<vector<int64_t>>,
                 greater<vector<int64_t>>>
      que;
  for (int i = 0; i < N; i++) que.push({T[i], 0, i});
  deque<int> que_tank;
  set<int> que_watch, leave;
  while (que.size()) {
    auto v = que.top();
    que.pop();
    int64_t t = v[0];
    int tp = v[1], i = v[2];
    if (tp == 1) {
      ans[i] = t;
      leave.erase(i);
      que_tank.pop_front();
      if (que_tank.size()) que.push({t + P, 1, que_tank[0]});
    } else {
      que_watch.insert(i);
    }
    if (que_watch.size()) {
      int fst = *que_watch.begin();
      if (leave.size() == 0 || *leave.begin() > fst) {
        que_watch.erase(fst);
        leave.insert(fst);
        que_tank.push_back(fst);
        if (que_tank.size() == 1) que.push({t + P, 1, que_tank[0]});
      }
    }
  }
  for (int i = 0; i < N; i++) cout << ans[i] << " \n"[i == N - 1];
  return 0;
}
