/*
* POJ_1106.cpp
*
* Created on: 2013年11月16日
* Author: Administrator
*/
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
const double epsi = 1e-10;
const double pi = acos(-1.0);
const int maxn = 50005;
struct Point{
double x,y;
Point(double _x = 0,double _y = 0):x(_x),y(_y){
}
Point operator-(const Point& op2)const{//**要注意这种写法
return Point(x - op2.x,y - op2.y);
}
double operator^(const Point& op2)const{
return x*op2.y - y*op2.x;
}
};
int sign(const double& x){//判断x是正数还是负数
if(x > epsi){
return 1;//传入的数是一个整数...
}else if(x < -epsi){
return -1;//传入的数是一个负数...
}
return 0;
}
double sqr(double x){//计算一个数的平方数
return x*x;
}
double mul(const Point& p0,const Point& p1,const Point& p2){//计算p0p1与p1p2的叉积叉积
return (p1-p0)^(p2-p0);
}
double dis2(const Point& p0,const Point& p1){//返回两个点的距离的平方
return sqr(p0.x - p1.x) + sqr(p0.y - p1.y);
}
double dis(const Point& p0,const Point& p1){//返回两个点的距离
return sqrt(dis2(p0,p1));
}
int n;
Point p[maxn],cp;
double r;
int main(){
while(scanf("%lf%lf%lf",&cp.x,&cp.y,&r),r >= 0){
scanf("%d",&n);
int i;
for(i = 0 ; i < n ; ++i){
scanf("%lf%lf",&p[i].x,&p[i].y);
}
int j;
int ans = 0;
for(i = 0 ; i < n ; ++i){
int temp = 0 ;
for(j = 0 ; j < n ; ++j){
if(sign(dis(p[j],cp) - r) != 1){//如果在辐射范围内
if(sign(mul(cp,p[i],p[j])) != 1){//如果在辐射的一边,这里等于-1也是行的
temp++;
}
}
}
ans = max(ans,temp);
}
printf("%d\n",ans);
}
return 0;
}