#include <bits/stdc++.h>
const int maxn = 1e5 + 5;
long long ans;
int n, k, lsh[maxn * 3], m, cnt;
struct BIT {
  int c[maxn * 3];
  void upd(int x, int v) {
    for (; x <= m; x += (x & (-x))) c[x] += v;
  }
  int sum(int x) {
    int res = 0;
    for (; x; x -= (x & (-x))) res += c[x];
    return res;
  }
} bit;
struct nod {
  int p, r, f, L, R;
} p[maxn];
bool cmp1(nod a, nod b) {
  return a.r == b.r ? (a.f == b.f ? a.p < b.p : a.f < b.f) : a.r > b.r;
}
bool cmp2(nod a, nod b) {
  return a.f == b.f ? (a.p == b.p ? a.r < b.r : a.p < b.p) : a.f < b.f;
}
void cdq(int l, int r) {
  if (l == r) return;
  int mid = l + r >> 1, i, j1, j2;
  cdq(l, mid), cdq(mid + 1, r);
  std::sort(p + l, p + mid + 1, cmp2), std::sort(p + mid + 1, p + r + 1, cmp2);
  for (i = mid + 1, j1 = l, j2 = l; i <= r; ++i) {
    while (j1 <= mid && p[i].f - p[j1].f > k) bit.upd(p[j1].p, -1), ++j1;
    while (j2 <= mid && p[j2].f - p[i].f <= k) bit.upd(p[j2].p, 1), ++j2;
    ans += bit.sum(p[i].R) - bit.sum(p[i].L - 1);
  }
  for (i = j1; i < j2; ++i) bit.upd(p[i].p, -1);
}
int main() {
  scanf("%d %d", &n, &k);
  for (int i = 1; i <= n; ++i)
    scanf("%d %d %d", &p[i].p, &p[i].r, &p[i].f), p[i].L = p[i].p - p[i].r,
                                                  p[i].R = p[i].p + p[i].r;
  for (int i = 1; i <= n; ++i)
    lsh[++cnt] = p[i].p, lsh[++cnt] = p[i].L, lsh[++cnt] = p[i].R;
  std ::sort(lsh + 1, lsh + cnt + 1);
  m = std ::unique(lsh + 1, lsh + cnt + 1) - lsh - 1;
  for (int i = 1; i <= n; ++i) {
    p[i].p = std ::lower_bound(lsh + 1, lsh + m + 1, p[i].p) - lsh;
    p[i].L = std ::lower_bound(lsh + 1, lsh + m + 1, p[i].L) - lsh;
    p[i].R = std ::lower_bound(lsh + 1, lsh + m + 1, p[i].R) - lsh;
  }
  std::sort(p + 1, p + n + 1, cmp1);
  cdq(1, n);
  printf("%lld", ans);
  return 0;
}
