#20~22,#26,#31~33 TLE
#28 WA?
#include<iostream>
#include<string.h>
using namespace std;
int n;
int map[3005][3005];
int x[3005],y[3005];
int dfn[3005],low[3005],color[3005],cnt=0,tot=0;
int v[3005],f[3005];
int sta[3005],top=0;
bool pd[3005];
void tarjan(int now)
{
cnt++;
dfn[now]=low[now]=cnt;
top++;
sta[top]=now;
pd[now]=true;
for(int i=1;i<=map[now][0];i++)
{
if(!dfn[map[now][i]])
{
tarjan(map[now][i]);
low[now]=min(low[now],low[map[now][i]]);
}
else if(pd[map[now][i]])
{
low[now]=min(low[now],dfn[map[now][i]]);
}
}
if(dfn[now]==low[now])
{
tot++;
do
{
pd[sta[top]]=false;
color[sta[top]]=tot;
v[tot]++;
top--;
}
while(sta[top+1]!=now);
}
}
int dfs(int now)
{
if(f[now])
{
return f[now];
}
int ans=0;
for(int i=1;i<=map[now][0];i++)
{
ans=max(ans,dfs(map[now][i]));
}
f[now]=ans+v[now];
return f[now];
}
int main()
{
int t,id;
cin>>t>>id;
while(t--)
{
cnt=tot=top=0;
memset(map,0,sizeof(map));
memset(dfn,0,sizeof(dfn));
memset(low,0,sizeof(low));
memset(color,0,sizeof(color));
memset(f,0,sizeof(f));
memset(v,0,sizeof(v));
int d,c;
cin>>n>>d>>c;
for(int i=1;i<=n;i++)
{
cin>>x[i]>>y[i];
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(y[i]+d-y[j]>=max(x[i]-x[j],x[j]-x[i])&&i!=j)
{
map[i][0]++;
map[i][map[i][0]]=j;
}
}
}
for(int i=1;i<=n;i++)
{
if(!dfn[i])
{
tarjan(i);
}
}
memset(map,0,sizeof(map));
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(y[i]+d-y[j]>=max(x[i]-x[j],x[j]-x[i])&&i!=j)
{
if(color[i]!=color[j])
{
map[color[i]][0]++;
map[color[i]][map[color[i]][0]]=color[j];
}
}
}
}
cout<<dfs(color[c])<<endl;
}
return 0;
}