#include <bits/stdc++.h>
using namespace std;
int n, k;
template <typename T = long long>
inline T read() {
  T s = 0, f = 1;
  char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    s = (s << 3) + (s << 1) + ch - 48;
    ch = getchar();
  }
  return s * f;
}
const int N = 4e5 + 5, M = 1e6 + 5, MOD = 1e9 + 7, CM = 998244353,
          INF = 0x3f3f3f3f;
int b[N];
struct Operation {
  int x, rr, iq, l, r;
} q[N];
struct BIT {
  int c[N];
  int lowbit(int x) { return x & (-x); }
  void add(int pos, int val) {
    for (; pos < N; pos += lowbit(pos)) c[pos] += val;
  }
  int sum(int pos) {
    int res = 0;
    for (; pos; pos -= lowbit(pos)) res += c[pos];
    return res;
  }
  int query(int l, int r) { return sum(r) - sum(l - 1); }
  void clear(int pos) {
    for (; pos < N; pos += lowbit(pos)) c[pos] = 0;
  }
} bit;
long long ans = 0;
void CDQ(int l, int r) {
  if (l == r) return;
  int mid = (l + r) >> 1;
  CDQ(l, mid), CDQ(mid + 1, r);
  int lp = l, rp = l;
  for (int i = mid + 1; i <= r; i++) {
    while (lp <= mid && q[lp].iq < q[i].iq - k) bit.add(q[lp++].x, -1);
    while (rp <= mid && q[rp].iq <= q[i].iq + k) bit.add(q[rp++].x, 1);
    ans += bit.query(q[i].l, q[i].r);
  }
  for (int i = lp; i < rp; i++) bit.add(q[i].x, -1);
  sort(q + l, q + r + 1,
       [](Operation &a, Operation &b) { return a.iq < b.iq; });
}
int all_num = 0;
int main() {
  n = read(), k = read();
  for (int i = 1; i <= n; i++) {
    int x = read(), r = read(), iq = read();
    q[i] = Operation{x, r, iq, 0, 0};
    b[++all_num] = x;
    b[++all_num] = x - r;
    b[++all_num] = x + r;
  }
  sort(b + 1, b + all_num + 1);
  int qq = unique(b + 1, b + all_num + 1) - b - 1;
  for (int i = 1; i <= n; i++) {
    q[i].l = lower_bound(b + 1, b + qq + 1, q[i].x - q[i].rr) - b;
    q[i].r = lower_bound(b + 1, b + qq + 1, q[i].x + q[i].rr) - b;
    q[i].x = lower_bound(b + 1, b + qq + 1, q[i].x) - b;
  }
  sort(q + 1, q + n + 1,
       [](Operation &a, Operation &b) { return a.rr > b.rr; });
  CDQ(1, n);
  printf("%lld\n", ans);
  return 0;
}
