//if-> else if没有逻辑
/*
5
1 100 60
70 27 88
1 100 75
80 39 34
1 100 50
605 563 50
1 200 160
120 176 40
1 200 10
50 47 84
No
Yes
Yes
Yes
No
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#include<bits/stdc++.h>
#define ll long long
#define ddd printf("----------------------\n");
using namespace std;
const int maxn=1e5+10 ;
ll n,h,r,x[maxn],y[maxn],z[maxn];
int fa[maxn],f1[maxn],f2[maxn],tot1,tot2;
int find(int x){return fa[x]==x? x:fa[x]=find(fa[x]);}
ll dis(int a,int b){ return (x[a]-x[b])*(x[a]-x[b])+(y[a]-y[b])*(y[a]-y[b])+(z[a]-z[b])*(z[a]-z[b]);}
int main()
{
ios::sync_with_stdio(false);
int T;cin>>T;
while(T--)
{
cin>>n>>h>>r;
tot1=0,tot2=0;
// memset(f1,0,sizeof(f1));memset(f2,0,sizeof(f2));
// for(int i=1;i<=n;i++) f[i]=i,f1[i]=i,f2[i]=i;
for(int i=1;i<=n;i++){
cin>>x[i]>>y[i]>>z[i];
if(z[i]+r>=h) f1[++tot1]=i;
if(z[i]-r<=0) f2[++tot2]=i; //else if/if 想清楚逻辑关系
fa[i]=i;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++){
if(dis(i,j)<=4*r*r){
int f1=find(i),f2=find(j);
if(f1!=f2) fa[f1]=f2;
}
}
int flag=0;
for(int i=1;i<=tot1;i++){
for(int j=1;j<=tot2;j++)
{
if(f1[i]&&f2[j])
{
if(find(f1[i])==find(f2[j])){
flag=1;break;
}
}
}
if(flag==1) break;
}
if(flag) cout<<"Yes"<<'\n';
else cout<<"No"<<'\n';
}
return 0;
}