#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<sstream>
#include<utility>
#include<map>
#include<vector>
#include<queue>
#include<algorithm>
#include<set>
using namespace std;
#define pow2(a) (pow(1.*a,2))
typedef struct D
{
	int c,pp,np;
	double d;
	bool operator <(const D &a)const{ return d>a.d;};
}D;

int N,X[21],Y[21],res=0,g[21][21][21];
double R,O,d[21][21],F[21][21][10010];
double ang(int pre,int now,int next)
{
	double a=d[pre][now],b=d[now][next],c=d[pre][next];
	double dd=acos((pow2(a)+pow2(b)-pow2(c))/(2*a*b));
	double df=180-(dd*180/3.141592);
	return df;
}

int main()
{
	scanf("%d%lf%lf",&N,&R,&O);
	memset(g,0,sizeof(g));
	for(int i=0;i<21;i++)for(int k=0;k<21;k++)for(int j=0;j<10010;j++)F[i][k][j]=1e14;
	for(int i=0;i<N;i++)scanf("%d%d",X+i,Y+i);
	for(int i=0;i<N;i++)
		for(int j=0;j<N;j++)
			d[i][j]=sqrt(pow2(X[i]-X[j])+pow2(Y[i]-Y[j]));
	for(int i=0;i<N;i++)
		for(int j=0;j<N;j++)
			for(int k=0;k<N;k++)
				if(ang(i,j,k)<O)
					g[i][j][k]=1;
	priority_queue<D>Q;
	for(int i=1;i<N;i++)
	{
		if(d[0][i]>R)continue;
		D tmp={1,0,i,d[0][i]};
		F[0][i][1]=d[0][i];
		Q.push(tmp);
	}
	for(;!Q.empty();)
	{
		D tmp=Q.top();Q.pop();
		res=max(tmp.c,res);
		if(F[tmp.pp][tmp.np][tmp.c]-tmp.d>0.001)
			continue;
		F[tmp.pp][tmp.np][tmp.c]=tmp.d;
		for(int i=0;i<N;i++)
		{
			if(i==tmp.np)continue;
			if(g[tmp.pp][tmp.np][i]&&tmp.d+d[tmp.np][i]<=R)
			{
				D ins={tmp.c+1,tmp.np,i,tmp.d+d[tmp.np][i]};
				if(F[ins.pp][ins.np][ins.c]-ins.d>0.001)
				{
					Q.push(ins);
					F[ins.pp][ins.np][ins.c]=ins.d;
				}
			}
		}
	}
	printf("%d\n",res);
	return 0;
}