#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:500000000")
using namespace std;
int main() {
  int n, p, i;
  scanf("%d %d", &n, &p);
  vector<int> T(n);
  set<pair<long long, int>> St;
  set<int> Rdy;
  for (i = 0; i < n; i++) {
    scanf("%d", &T[i]);
    St.insert({(long long)T[i], i});
  }
  vector<long long> End(n);
  queue<int> Q;
  set<int> F = {n};
  long long time = 0;
  while (time < INT64_MAX) {
    if (Q.size() && End[Q.front()] == time) {
      F.erase(Q.front());
      Q.pop();
      if (Q.size()) {
        End[Q.front()] = time + p;
      }
    }
    while (St.size()) {
      auto f = *St.begin();
      if (f.first > time) {
        break;
      }
      St.erase(St.begin());
      Rdy.insert(f.second);
    }
    if (Rdy.size()) {
      auto lfree = *F.begin();
      auto f = *Rdy.begin();
      if (f < lfree) {
        F.insert(f);
        if (Q.empty()) {
          End[f] = time + p;
        }
        Q.push(f);
        Rdy.erase(f);
      }
    }
    long long qt = Q.size() ? End[Q.front()] : INT64_MAX;
    long long nt = St.size() ? St.begin()->first : INT64_MAX;
    if (Q.empty() && Rdy.size()) {
    } else {
      time = min(qt, nt);
    }
  }
  for (i = 0; i < n; i++) {
    printf("%I64d ", End[i]);
  }
}
