#include <bits/stdc++.h>
using namespace std;
const int mod = int(1e9) + 7;
const long long infLL = 2e18;
const int MX = 300500;
const int F_MX = 10100;
pair<int, pair<int, int>> a[MX];
int b[40 * MX];
int l_son[40 * MX];
int r_son[40 * MX];
int root[F_MX];
int nxt = 1;
void add(int &u, int x, int l, int r) {
  if (u == 0) {
    u = nxt++;
  }
  b[u]++;
  if (l == r) {
    return;
  }
  int mid = (l + r) >> 1;
  if (x <= mid)
    add(l_son[u], x, l, mid);
  else
    add(r_son[u], x, mid + 1, r);
}
void add(int k, int x) { add(root[k], x, 1, mod); }
int get_ans(int &u, int l, int r, int ll, int rr) {
  if (u == 0) return 0;
  if (l > rr || ll > r) return 0;
  if (l <= ll && r >= rr) return b[u];
  int mid = (ll + rr) >> 1;
  return get_ans(l_son[u], l, r, ll, mid) +
         get_ans(r_son[u], l, r, mid + 1, rr);
}
int get_ans(int k, int l, int r) { return get_ans(root[k], l, r, 1, mod); }
int main() {
  ios_base::sync_with_stdio(false);
  int n, k;
  cin >> n >> k;
  for (int i = 0; i < n; i++) {
    cin >> a[i].second.first >> a[i].first >> a[i].second.second;
    a[i].second.second += 10;
  }
  sort(a, a + n);
  reverse(a, a + n);
  long long ans = 0;
  for (int i = 0; i < n; i++) {
    int x = a[i].second.first;
    int r = a[i].first;
    int f = a[i].second.second;
    for (int ff = f - k; ff <= f + k; ff++) {
      ans += get_ans(ff, x - r, x + r);
    }
    add(f, x);
  }
  cout << ans << endl;
  return 0;
}
