#include <bits/stdc++.h>
using namespace std;
struct node {
  long long l, r;
  int now;
  vector<pair<int, int> > v;
} st[250005 * 4];
int pi, ri, n, N;
int p[250005], m[250005];
long long r, sp[250005];
pair<long long, int> d[250005];
queue<int> q;
vector<long long> rr;
bool vis[250005];
void init(int id, int l, int r) {
  if (l == r) {
    st[id].l = rr[l - 1] + 1;
    st[id].r = rr[l];
    int L = lower_bound(d + 2, d + n + 2, make_pair(rr[l - 1] + 1, 0)) - d;
    int R = upper_bound(d + 2, d + n + 2, make_pair(rr[l], 1000000000)) - d;
    for (int i = L; i < R; i++) {
      st[id].v.push_back(make_pair(m[d[i].second], d[i].second));
    }
    sort(st[id].v.begin(), st[id].v.end());
    return;
  }
  int mid = l + r >> 1;
  init(id * 2, l, mid);
  init(id * 2 + 1, mid + 1, r);
  st[id].l = st[id * 2].l;
  st[id].r = st[id * 2 + 1].r;
  st[id].v.insert(st[id].v.begin(), st[id * 2].v.begin(), st[id * 2].v.end());
  st[id].v.insert(st[id].v.end(), st[id * 2 + 1].v.begin(),
                  st[id * 2 + 1].v.end());
  sort(st[id].v.begin(), st[id].v.end());
}
void query(int id, int l, int r, long long L, long long R, int p) {
  if (R < st[id].l || st[id].r < L) return;
  if (L <= st[id].l && st[id].r <= R) {
    int len = st[id].v.size();
    while (st[id].now < len && st[id].v[st[id].now].first <= p) {
      if (!vis[st[id].v[st[id].now].second])
        q.push(st[id].v[st[id].now].second);
      vis[st[id].v[st[id].now].second] = 1;
      st[id].now++;
    }
    return;
  }
  int mid = l + r >> 1;
  query(id * 2, l, mid, L, R, p);
  query(id * 2 + 1, mid + 1, r, L, R, p);
}
int main() {
  long long x, y, xi, yi;
  scanf("%I64d%I64d%d%I64d%d", &xi, &yi, &p[1], &r, &n);
  r *= r;
  sp[1] = r;
  rr.push_back(r);
  for (int i = 2; i <= n + 1; i++) {
    scanf("%I64d%I64d%d%d%I64d", &x, &y, &m[i], &p[i], &r);
    x -= xi;
    y -= yi;
    d[i].first = x * x + y * y;
    d[i].second = i;
    r *= r;
    sp[i] = r;
    rr.push_back(r);
  }
  rr.push_back(0);
  sort(rr.begin(), rr.end());
  rr.resize(unique(rr.begin(), rr.end()) - rr.begin());
  N = rr.size() - 1;
  sort(d + 2, d + n + 2);
  init(1, 1, N);
  q.push(1);
  while (!q.empty()) {
    int now = q.front();
    q.pop();
    query(1, 1, N, 1, sp[now], p[now]);
  }
  int cnt = 0;
  for (int i = 2; i <= n + 1; i++) {
    if (vis[i]) {
      cnt++;
    }
  }
  printf("%d\n", cnt);
}
