#include <iostream>
#include <vector>
#include <queue>
#include <math.h>
#include <cstring>
#include <cstdio>
using namespace std;
int T,n,h,r;
struct point
{
int x,y,z,num;
}f[1005];
queue<point> q;
bool v[1005],flag;
double dis (int x1,int y1,int z1,int x2,int y2,int z2)
{
double a=(x1-x2)*(x1-x2);
double b=(y1-y2)*(y1-y2);
double c=(z1-z2)*(z1-z2);
return sqrt (a+b+c);
}
int main()
{ //freopen ("P3985.txt","r",stdin);
//freopen ("P3985.txt","w",stdout);
cin>>T;
for (int i=1;i<=T;i++)
{ int start;
flag=0;
memset (v,0,sizeof(v));
cin>>n>>h>>r;
for (int k=1;k<=n;k++)
{
int x,y,z;
cin>>x>>y>>z;
f[k].x=x; f[k].y=y; f[k].z=z; f[k].num=k;
}
for (int j=1;j<=n;j++)
{
if (f[i].z<=r)
{
start=i;
break;
}
}
v[start]=1;
q.push(f[start]);
while (!q.empty())
{ point u=q.front();
if (u.z+r>=h)
{
flag=1;
cout<<"Yes"<<endl;
break;
}
q.pop();
for (int i=1;i<=n;i++)
{ double g=dis(u.x,u.y,u.z,f[i].x,f[i].y,f[i].z);
if (u.num!=i && g<=2*r && !v[i])
{
v[i]=1;
q.push(f[i]);
}
}
}
if (!flag) cout<<"No"<<endl;
}
// fclose (stdin); fclose (stdout);
return 0;
}