# include <stdio.h>
# include <math.h>
struct node
{
double x,y;
}vex[156];
double x,y,r;
double cross(node a,node b,node c)
{
return (b.x-a.x)*(c.y-a.y)-(c.x-a.x)*(b.y-a.y);
}
void solve(int n)
{
int sum=0,max=0,tt;
vex[155].x=x;
vex[155].y=y;
for(int i=0;i<n;i++)
{
sum=0;tt=0;
for(int j=0;j<n;j++)
{
if(i!=j)
{
//printf("%lf\n",cross(vex[155],vex[i],vex[j]));
if(cross(vex[155],vex[i],vex[j])==0.0)
tt++;
else if(cross(vex[155],vex[i],vex[j])<0.0)
sum++;
}
}
int d=(sum+tt+1)>(n-sum)?(sum+tt+1):(n-sum);
if(d>max) max=d;
//printf("sum===%d tt===%d d===%d\n",sum,tt,d);
}
printf("%d\n",max);
}
int main ()
{
int n;
double a,b;
while(scanf("%lf%lf%lf",&x,&y,&r)!=EOF)
{
if(r<0.0)
break;
int cnt=0;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%lf%lf",&a,&b);
if(sqrt((a-x)*(a-x)+(b-y)*(b-y))<=r)
{vex[cnt].x=a;vex[cnt++].y=b;}
}
if(n==0)
{
printf("0\n");continue;
}
//printf("cnt==%d\n",cnt);
solve(cnt);
}
return 0;
}
水题 不解释