#include #include #include #include #include #include #include #include #include #include using namespace std; struct Jinja { int h, x, y, idx; bool removed = false; Jinja(){}; }; bool is_near(Jinja p, Jinja q, long long k) { long long dx = p.x - q.x; long long dy = p.y - q.y; long long dist2 = dx*dx + dy*dy; return dist2 <= k*k; } int main() { int n, k; cin >> n >> k; vector jinjas(n); for (int i = 0; i < n; i++) { int h; cin >> h; jinjas[i].h = h; jinjas[i].idx = i; jinjas[i].removed = false; } for (int i = 0; i < n; i++) { int x, y; cin >> x >> y; jinjas[i].x = x; jinjas[i].y = y; } sort(jinjas.begin(), jinjas.end(), [](const Jinja &a, const Jinja &b){ return a.h < b.h; }); for (int i = 0; i < n; i++) { // fprintf(stderr, "---- i %d, h %d, idx %d\n", i, jinjas[i].h, jinjas[i].idx); for (int j = i+1; j < n; j++) { if (jinjas[i].h == jinjas[j].h) { continue; } if (is_near(jinjas[i], jinjas[j], k)) { // fprintf(stderr, "removed! idx %d, h %d\n", jinjas[j].idx, jinjas[j].h); jinjas[i].removed = true; } } } int ans = 0; for (auto j: jinjas) { if (!j.removed) { ans++; } } cout << ans << endl; }