#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
struct P {
  int t, id;
  bool operator<(const P &tmp) const {
    if (t != tmp.t) return t < tmp.t;
    return id < tmp.id;
  }
} p[N];
priority_queue<int, vector<int>, greater<int> > qu;
queue<int> q;
set<int> s;
long long ans[N];
int n, t;
long long now = 0, ed = -1, nid = 0;
void gao() {
  if (qu.empty()) return;
  int x = qu.top();
  if (!s.empty() && (*s.begin()) < x) return;
  if (q.empty()) ed += t;
  qu.pop();
  q.push(x);
  s.insert(x);
}
int main() {
  scanf("%d%d", &n, &t);
  for (int i = 0; i < n; i++) scanf("%d", &p[i].t), p[i].id = i;
  sort(p, p + n);
  while (true) {
    if (nid < n && (ed >= p[nid].t || q.empty())) {
      now = p[nid].t;
      if (!s.empty() && (*s.begin()) < p[nid].id)
        qu.push(p[nid].id);
      else if (ed == p[nid].t)
        qu.push(p[nid].id);
      else {
        if (q.empty()) ed = now + t;
        q.push(p[nid].id);
        s.insert(p[nid].id);
      }
      nid++;
    } else if (!q.empty()) {
      int x = q.front();
      q.pop();
      now = max(now, ed);
      s.erase(x);
      ans[x] = ed;
      if (!q.empty()) ed += t;
      gao();
    } else
      break;
  }
  for (int i = 0; i < n; i++) printf("%lld ", ans[i]);
  return 0;
}
