#include<bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define X first
#define Y second
#define fill(A,B) memset(A,B,sizeof(A))
#define For(i,A,B) for(int i=(A);i<(int)(B);i++)
#define rep(i,A,B) for(int i=(A);i<=(B);i++)
#define dep(i,B,A) for(int i=(B);i>=(A);i--)
#define re(i,A) for(int i=0;i<(int)(A);i++)
#define de(i,A) for(int i=(A)-1;~i;i--)
#define inf (1<<30)
#define mn 250011
#define P 1000000007
#define si(x) ((int)x.size())
#define MAX(A,B) A=max(A,B)
#define MIN(A,B) A=min(A,B)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
inline ll pow(ll a,ll b,ll mo){if(!a)return 0;ll tmp=1;for(;b;b>>=1){if(b&1)tmp=(ll)tmp*a%mo;a=(ll)a*a%mo;}return tmp;}
template<class T>inline void R(T &xx){xx=0;char ch=getchar();bool F=0;while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();if(ch=='-')F=1,ch=getchar();while(ch>='0'&&ch<='9')xx=xx+xx+(xx<<3)+ch-48,ch=getchar();if(F)xx=-xx;}
int n,x0,y0,p,l1,rr=1;pair<ll,int>q[mn];ll r;
struct nod{int p,m;ll d,r;inline bool operator<(const nod&b)const{return d<b.d;}}a[mn];
int seg[mn<<2];
#define ls (x<<1)
#define rs (x<<1|1)
void build(int x,int l,int r){
if(l==r){
seg[x]=a[l].m;return;
}
int mid=l+r>>1;
build(ls,l,mid);build(rs,mid+1,r);
seg[x]=min(seg[ls],seg[rs]);
}
void modi(int x,int l,int r,ll R,int p){
if(seg[x]>p)return;
if(l==r){
q[rr++]=mp(a[l].r,a[l].p);
seg[x]=inf;
return;
}
int mid=l+r>>1;
modi(ls,l,mid,R,p);modi(rs,mid+1,r,R,p);
seg[x]=min(seg[ls],seg[rs]);
}
void que(int x,int l,int r,ll R,int p){
if(a[l].d>R)return;
if(a[r].d<=R){modi(x,l,r,R,p);return;}
int mid=l+r>>1;
que(ls,l,mid,R,p);que(rs,mid+1,r,R,p);
}
int main(){
#ifndef ONLINE_JUDGE
freopen("1.in","r",stdin);
//freopen("2.out","w",stdout);
#endif
R(x0),R(y0);R(p),R(r),R(n);r*=r;
int x,y;rep(i,1,n)R(x),R(y),R(a[i].m),R(a[i].p),R(a[i].r),a[i].r*=a[i].r,a[i].d=(ll)(x0-x)*(x0-x)+((ll)y0-y)*(y0-y);
sort(a+1,a+1+n);
build(1,1,n);
for(q[0]=mp(r,p);l1<rr;){
// cout<<q[l1].X<<" "<<q[l1].Y<<endl;
que(1,1,n,q[l1].X,q[l1].Y);l1++;
}
printf("%d\n",rr-1);
return 0;
}