#include <bits/stdc++.h>
using namespace std;
long long n, p;
long long niz[100005];
set<pair<long long, long long> > q;
set<long long> cekalica;
long long bit[100005];
long long res[100005];
long long poslednji = 0;
void dodaj(long long p, long long x) {
  for (; p < 100005; p += (-p) & p) bit[p] += x;
}
long long dobij(long long p) {
  long long z = 0;
  for (; p > 0; p -= (-p) & p) z += bit[p];
  return z;
}
int main() {
  scanf("%I64d %I64d", &n, &p);
  for (long long i = 1; i <= n; i++) {
    long long t;
    scanf("%I64d", &t);
    q.insert(make_pair(t, i - n - n));
    dodaj(i, 1);
  }
  while (!q.empty()) {
    auto t = *(q.begin());
    q.erase(q.begin());
    if (t.second > 0) {
      dodaj(t.second, 1);
      res[t.second] = t.first;
      if (!cekalica.empty() &&
          (*cekalica.begin()) == dobij(*cekalica.begin())) {
        long long a = *cekalica.begin();
        cekalica.erase(cekalica.begin());
        dodaj(a, -1);
        q.insert(make_pair(max(poslednji, t.first) + p, a));
        poslednji = max(poslednji, t.first) + p;
      }
      continue;
    }
    t.second = t.second + n + n;
    if (dobij(t.second) < t.second)
      cekalica.insert(t.second);
    else {
      dodaj(t.second, -1);
      q.insert(make_pair(max(poslednji, t.first) + p, t.second));
      poslednji = max(poslednji, t.first) + p;
    }
  }
  for (long long i = 1; i <= n; i++) printf("%I64d ", res[i]);
  return 0;
}
