#include <bits/stdc++.h>
using namespace std;
long long int sol[1000000];
struct elem {
  int x, y;
  elem() {}
  elem(int x, int y) : x(x), y(y) {}
};
bool operator<(elem e1, elem e2) {
  return e1.x < e2.x or (e1.x == e2.x and e1.y < e2.y);
}
bool compara(elem e1, elem e2) { return e1.y > e2.y; }
int n, k;
set<elem> s;
int nv;
elem v[1000000];
void tratar() {
  nv = 0;
  for (set<elem>::iterator it = s.begin(); it != s.end(); it++) v[nv++] = *it;
  int i1 = 0, i2 = 0;
  int cuantos = 0;
  int pos = -1000000001;
  while (i1 < nv) {
    int nextpos = v[i1].x + k;
    if (i2 < nv) nextpos = min(nextpos, v[i2].x);
    sol[cuantos] += nextpos - pos;
    while (i2 < nv and v[i2].x <= nextpos) {
      cuantos++;
      i2++;
    }
    while (i1 < nv and v[i1].x <= nextpos - k) {
      cuantos--;
      i1++;
    }
    pos = nextpos;
  }
}
elem input[1000000];
set<int> slista;
int nlista = 0;
int lista[1000000];
int main() {
  cin >> n >> k;
  for (int i = 0; i < n; i++) {
    cin >> input[i].x >> input[i].y;
    slista.insert(input[i].y);
  }
  sort(input, input + n, compara);
  for (set<int>::iterator it = slista.begin(); it != slista.end(); it++)
    lista[nlista++] = *it;
  reverse(lista, lista + nlista);
  int iinput = 0;
  int iinput2 = 0;
  for (int i = 0; i < nlista; i++) {
    int y = lista[i];
    for (int kk = 0; kk < k and (i == nlista - 1 or y - kk > lista[i + 1]);
         kk++) {
      while (iinput < n and input[iinput].y >= y - kk)
        s.insert(input[iinput++]);
      while (iinput2 < n and input[iinput2].y - k >= y - kk)
        s.erase(input[iinput2++]);
      tratar();
    }
  }
  for (int i = 1; i <= n; i++) {
    if (i > 1) cout << " ";
    cout << sol[i];
  }
  cout << endl;
}
