#include <bits/stdc++.h>
using namespace std;
ifstream fin("test.in");
ofstream fout("test.out");
const int NMAX = 1e5 + 10;
long long t, p;
int n;
struct strev {
  long long t;
  int index, tip;
  bool operator()(strev x, strev y) const {
    if (x.t == y.t) {
      if (x.tip == y.tip) return x.index < y.index;
      return x.tip < y.tip;
    }
    return x.t < y.t;
  }
} aux;
set<strev, strev> ev;
set<int> want;
set<int> que;
long long cur_time, que_time;
long long out[NMAX];
void read() {
  cin >> n >> p;
  for (int i = 1; i <= n; i++) {
    cin >> t;
    ev.insert({t, i, 1});
  }
}
void solve() {
  while (!ev.empty()) {
    cur_time = (*ev.begin()).t;
    while (cur_time == (*ev.begin()).t) {
      aux = *ev.begin();
      ev.erase(ev.begin());
      if (aux.tip == 2)
        que.erase(aux.index);
      else
        want.insert(aux.index);
    }
    if (!want.empty()) {
      int x = *want.begin();
      if (que.empty() || x < *que.begin()) {
        que.insert(x);
        que_time = max(cur_time, que_time) + p;
        ev.insert({que_time, x, 2});
        out[x] = que_time;
        want.erase(want.begin());
      }
    }
  }
  for (int i = 1; i <= n; i++) cout << out[i] << " ";
}
int main() {
  read();
  solve();
  return 0;
}
