#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
typedef struct node {
double x,y,z;
} qiu;
qiu a[1005];
bool cmp(qiu aa,qiu bb) {
return aa.z < bb.z ;
}
double dis(qiu p1,qiu p2) {
return sqrt(pow((p1.x -p2.x ),2)+pow((p1.y -p2.y ),2)+pow((p1.z -p2.z ),2));
}
bool flag;
long long n;
double h,r;
bool b[1005];
long long link[1005][1005];
bool fail[1005];
//void dfs(long long id) {
// if(flag) return;
// long long i;
// for(i=1; i<=n; i++) {
// if(i==id) continue;
// if(!b[i]&&link[id][i]<=2*r) {
// b[i]=1;
// if(a[i].z + r >=h){
// return;
// }else{
// dfs(i);
// }
//
// b[i]=0;
// }
// }
//}
void dfs(long long id,long long sum) {
if(flag) return;
if(sum + r >= h) {
flag=1;
return;
}
register int i;
for(i=1; i<=n; i++) {
if(i==id) continue;
if(!b[i]&&link[id][i]<=2*r&&!fail[i]) {
b[i]=1;
dfs(i,a[i].z);
b[i]=0;
fail[i]=1;
}
}
}
int main() {
long long t;
// freopen("test.in","r",stdin);
// freopen("cheese.out","w",stdout);
scanf("%lld",&t);
while(t--) {
memset(b,0,sizeof(b));
memset(fail,0,sizeof(fail));
bool succ=0;
scanf("%lld%lf%lf",&n,&h,&r);
for(long long i=1; i<=n; i++) {
scanf("%lf%lf%lf",&a[i].x ,&a[i].y ,&a[i].z );
}
sort(a+1,a+1+n,cmp);
for(register int i=1; i<=n; i++) {
for(long long j=1; j<=n; j++) {
link[i][j]=dis(a[i],a[j]);
link[j][i]=dis(a[i],a[j]);
}
}
// for(long long i=1;i<=n;i++){
// cout<<a[i].x <<" "<<a[i].y <<" "<<a[i].z <<endl;
// }
for(register int i=1; i<=n; i++) {
if(abs(a[i].z )-r>0) break;
else {
// cout<<i<<endl;
flag=0;
dfs(i,a[i].z);
if(flag) {
cout<<"Yes"<<endl;
succ=1;
break;
}
}
}
if(!succ) cout<<"No"<<endl;
// if(abs(a[1].z) - r >0) {
// cout<<"No"<<endl;
// continue;
// } else {
// flag=0;
// dfs(1);
// if(flag==1){
// cout<<"Yes"<<endl;
// continue;
// }
// }
}
return 0;
}