#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#define ll long long
using namespace std;
ll t,n,h,r,x[1001],y[1001],z[1001];
int f[1001],top[100001],bot[100001],tn=1,bn=1;
bool flag;
int getf(int u){
if(f[u]!=u)f[u]=getf(f[u]);
return f[u];
}
ll dis(ll x1,ll x2,ll y1,ll y2,ll z1,ll z2){
return sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)+(z2-z1)*(z2-z1));
}
int main(){
scanf("%d",&t);
while(t--){
tn=1;bn=1;
scanf("%lld%lld%lld",&n,&h,&r);
for(int i=1;i<=n;i++)f[i]=i;
for(int i=1;i<=n;i++){
scanf("%lld%lld%lld",&x[i],&y[i],&z[i]);
if(z[i]+r>=h)top[tn]=i;tn++;
if(z[i]-r<=0)bot[bn]=i;bn++;
for(int j=1;j<=i;j++){
if((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])>2*r) continue;
if(dis(x[i],x[j],y[i],y[j],z[i],z[j])<=2*r){
int a=getf(i),b=getf(j);
if(a!=b)f[a]=b;
}
}
}
flag=0;
for(int i=1;i<=tn;i++){
for(int j=1;j<=bn;j++){
if(getf(top[i])==getf(bot[j])&&getf(top[i]))flag=1;break;
}
if(flag)break;
}
if(flag)printf("Yes\n");
else printf("No\n");
memset(top,0,sizeof(top));
memset(bot,0,sizeof(top));
}
return 0;
}
前两个样例A了后面全WA
目前没有超时