#include <bits/stdc++.h>
using namespace std;
const int N = (int)3e5 + 4;
const int inf = (int)1e9 + 7;
const long double eps = 1e-7;
const int K = 21;
const int M = 1001;
struct point {
  int x, y;
  point() { x = 0, y = 0; }
  ~point() {}
  point(int x, int y) : x(x), y(y) {}
  bool operator<(const point &arg) const {
    if (x == arg.x) {
      return y < arg.y;
    }
    return x < arg.x;
  }
  bool operator==(const point &arg) const { return x == arg.x && y == arg.y; }
};
struct event {
  point A;
  bool type;
  event() { type = 0, A = point(0, 0); }
  ~event() {}
  event(const point &A, bool type) : A(A), type(type) {}
  bool operator<(const event &arg) const {
    if (A == arg.A) {
      return type > arg.type;
    }
    return A < arg.A;
  }
};
int cord[101 * N];
long long ans[N];
int cnt[101 * N];
event points[N];
int main() {
  int n, k;
  scanf("%d%d", &n, &k);
  int sz_c = 0, sz_ev = 0;
  for (int i = 0; i < n; ++i) {
    int x, y;
    scanf("%d%d", &x, &y);
    for (int j = 0; j <= k; ++j) {
      cord[sz_c++] = y - j;
    }
    points[sz_ev++] = event(point(x - k, y), true);
    points[sz_ev++] = event(point(x, y), false);
  }
  sort(cord, cord + sz_c);
  sort(points, points + sz_ev);
  int sz = unique(cord, cord + sz_c) - cord;
  for (int i = 0; i < sz_ev; ++i) {
    point cur = points[i].A;
    bool f = points[i].type;
    int st = lower_bound(cord, cord + sz, cur.y) - cord;
    for (int j = st; j > st - k; --j) {
      ans[cnt[j]] += cur.x;
      if (f) {
        ++cnt[j];
      } else {
        --cnt[j];
      }
      ans[cnt[j]] -= cur.x;
    }
  }
  for (int i = 1; i <= n; ++i) {
    printf("%lld ", ans[i]);
  }
  return 0;
}
