#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 7;
int n, P, T;
long long ans[maxn];
struct dat {
  long long tim;
  int id;
  bool flag;
  dat(long long _tim = 0, int _id = 0, bool _flag = 0) {
    tim = _tim, id = _id, flag = _flag;
  }
  inline bool operator<(const dat &tmp) const {
    if (tim != tmp.tim) return tim > tmp.tim;
    return flag != tmp.flag ? flag > tmp.flag : id > tmp.id;
  }
} D[maxn];
priority_queue<dat> Q;
set<int> inQ, wnt;
int main() {
  cin >> n >> P;
  for (int i = 1; i <= n; i++) cin >> T, D[i] = dat(T, i, 0);
  for (int i = 1; i <= n; i++) Q.push(D[i]);
  long long las = 0;
  while (!Q.empty()) {
    dat t = Q.top();
    Q.pop();
    if (!t.flag) {
      if (inQ.empty() || *inQ.begin() > t.id) {
        las = max(las, t.tim), Q.push(dat(las + P, t.id, 1));
        inQ.insert(t.id);
        las += P;
      } else
        wnt.insert(t.id);
      continue;
    }
    ans[t.id] = t.tim;
    inQ.erase(t.id);
    if (!wnt.empty() && (inQ.empty() || *inQ.begin() > *wnt.begin())) {
      auto p = wnt.begin();
      inQ.insert(*p);
      Q.push(dat(las + P, *p, 1));
      las += P;
      wnt.erase(p);
    }
  }
  for (int i = 1; i <= n; i++) printf("%lld ", ans[i]);
  puts("");
  return 0;
}
