#include <bits/stdc++.h>
using namespace std;
const int N = 100005, INF = 2000000000;
struct sl {
  int x, y1, y2, f;
} l[N * 2];
vector<int> row;
int n, m, z, x, y, K;
long long ans[N];
bool cmp1(sl a, sl b) { return a.y1 < b.y1; }
bool cmp2(sl a, sl b) { return a.x < b.x || (a.x == b.x && a.y1 < b.y1); }
int main() {
  scanf("%d%d", &n, &K);
  for (int i = 1; i <= n; ++i) {
    scanf("%d%d", &x, &y);
    l[2 * i - 1].x = x;
    l[2 * i - 1].y1 = y - K + 1;
    l[2 * i - 1].y2 = y;
    l[2 * i - 1].f = 1;
    l[2 * i].x = x + K;
    l[2 * i].y1 = y - K + 1;
    l[2 * i].y2 = y;
    l[2 * i].f = -1;
  }
  sort(l + 1, l + 2 * n + 1, cmp1);
  z = -INF;
  for (int i = 1; i <= 2 * n; ++i) {
    for (int j = max(z + 1, l[i].y1); j <= l[i].y2; ++j) row.push_back(j);
    z = l[i].y2;
  }
  sort(l + 1, l + 2 * n + 1, cmp2);
  vector<int> last(row.size(), -INF);
  for (int i = 1; i <= 2 * n; ++i) {
    l[i].y1 = lower_bound(row.begin(), row.end(), l[i].y1) - row.begin();
    l[i].y2 = lower_bound(row.begin(), row.end(), l[i].y2) - row.begin();
  }
  for (int i = 0; i < row.size(); ++i) row[i] = 0;
  for (int i = 1; i <= 2 * n; ++i) {
    for (z = i; z + 1 <= 2 * n && l[z + 1].x == l[i].x; ++z)
      ;
    for (int j = l[i].y1; j <= l[z].y2; ++j) {
      if (row[j] != 0) ans[row[j]] += l[i].x - last[j];
      last[j] = l[i].x;
    }
    for (int p = i; p <= z; ++p)
      for (int j = l[p].y1; j <= l[p].y2; ++j) row[j] += l[p].f;
    i = z;
  }
  for (int i = 1; i <= n; ++i) printf("%I64d ", ans[i]);
}
