#include<iostream>
#include<cstdlib>
#include<ctime>
#include<cmath>
using namespace std;
int n,m;
double R;
double x[20],y[20],r[20];
double p[1010],q[1010];
double ansx,ansy,ans;
double nowx,nowy;
double Random(){return (double)rand()/RAND_MAX;}
bool check(double xx,double yy);
int calc(double xx,double yy);
void simulateAnneal();
void doit(double mxx,double mxy,double mnx,double mny){
ansx=(mxx-mnx==0)?mnx:(double)(rand()%(int)(mxx-mnx)+mnx);
ansy=(mxy-mny==0)?mny:(double)(rand()%(int)(mxy-mny)+mny);
nowx=ansx;nowy=ansy;
ans=calc(ansx,ansy);
simulateAnneal();
}
int main(){
srand(time(NULL));
cin>>n>>m>>R;
double mxx=0,mxy=0,mnx=0x7fffffff,mny=0x7fffffff;
for(int i=1;i<=n;i++){
cin>>x[i]>>y[i]>>r[i];
}
for(int i=1;i<=m;i++){
cin>>p[i]>>q[i];
mxx=max(mxx,p[i]);
mxy=max(mxy,q[i]);
mnx=min(mnx,p[i]);
mny=min(mny,q[i]);
}
doit(mxx,mxy,mnx,mny);
doit(mxx,mxy,mnx,mny);
doit(mxx,mxy,mnx,mny);
doit(mxx,mxy,mnx,mny);
doit(mxx,mxy,mnx,mny);
doit(mxx,mxy,mnx,mny);
doit(mxx,mxy,mnx,mny);
doit(mxx,mxy,mnx,mny);
cout<<ans<<'\n';
return 0;
}
int calc(double xx,double yy){
double rrr=-1.0;
for(int i=1;i<=n;i++){
rrr=max(rrr,sqrt((xx-x[i])*(xx-x[i])+(yy-y[i])*(yy-y[i]))-r[i]);
}
rrr=min(R,rrr);
int res=0;
for(int i=1;i<=m;i++){
if(sqrt((xx-p[i])*(xx-p[i])+(yy-q[i])*(yy-q[i]))<=rrr)res++;
}
if(res>ans){
ans=res;
ansx=xx;
ansy=yy;
}
return res;
}
void simulateAnneal(){
double t=29000;
while(t>0.0001){
double nxtx=nowx+t*(Random()*2-1)/2;
double nxty=nowy+t*(Random()*2-1)/2;
double delta=calc(nxtx,nxty)-calc(nowx,nowy);
if(exp(-delta/t)>Random()){
nowx=nxtx;
nowy=nxty;
}
t*=0.999;
}
for(int i=1;i<=1000;i++){
double nxtx=ansx+t*(Random()*2-1)/2;
double nxty=ansy+t*(Random()*2-1)/2;
calc(nxtx,nxty);
}
}