#include <bits/stdc++.h>
using namespace std;
const int len = 3e5 + 10;
const int mod = 1e9 + 7;
int a[len];
long long ans[len];
multiset<pair<int, int> > se;
multiset<int> ok;
queue<int> qu;
int main() {
  int n;
  long long p;
  cin >> n >> p;
  for (int i = 1; i <= n; ++i) scanf("%d", &a[i]), se.insert({a[i], i});
  long long all = 0;
  while (se.size()) {
    if (ok.size() == 0 && (*se.begin()).first > all) all = (*se.begin()).first;
    while (se.size() && (*se.begin()).first <= all)
      ok.insert((*se.begin()).second), se.erase(se.begin());
    all += p;
    ans[*ok.begin()] = all;
    qu.push(*ok.begin());
    int pre = qu.front();
    ok.erase(ok.begin());
    while (se.size() && (*se.begin()).first <= all) {
      if ((*se.begin()).second < pre) {
        pre = (*se.begin()).second;
        all += p;
        ans[pre] = all;
        qu.push(pre);
      } else
        ok.insert((*se.begin()).second);
      se.erase(se.begin());
    }
    while (qu.size()) qu.pop();
  }
  while (ok.size()) {
    all += p;
    ans[*ok.begin()] = all;
    ok.erase(ok.begin());
  }
  for (int i = 1; i <= n; ++i) printf("%lld ", ans[i]);
}
