#include <stdio.h>
namespace judgeduck {
extern char *stdin_content;
extern int stdin_size;
extern char *stdout_content;
extern int stdout_size;
extern int stdout_max_size;
}
#define uuin (judgeduck::stdin_content)
char* _O_pos = judgeduck::stdout_content;
inline int gyo() {
int res = 0;
do {res=10*res-48+*uuin++;} while(*uuin>47);
++uuin;
return res;
}
inline int get() {
if (*uuin=='-') {
++uuin;
return -gyo();
} else {
return gyo();
}
}
#define gyo get
inline void put(int c,int k) {
*((int*)_O_pos) = c; c+=k;
}
#include<cstdio>
#include<iostream>
#include<cmath>
#include <setjmp.h>
using namespace std;
int x[1005],y[1005],z[1005],n,h,r;long long um;
char beg[1005],End[1005],color[1005];
inline long long check(int i,int j){
long long t1=x[i]-x[j];
long long t2=y[i]-y[j];
long long t3=z[i]-z[j];
return (t1*t1+t2*t2+t3*t3);
}
jmp_buf jp ;
void dfs(int x){
beg[x]=2;
if (End[x]) longjmp(jp,1);
for (int i=1;i<=n;i++){
if (!beg[i] && check(x,i)<=um)
dfs(i);
}
}
int main() {
int cas=gyo(); goto a;b:
while (cas--){if(1) {n=gyo(),h=gyo(),r=gyo();
for (int i=1;i<=n;i++);
for (int i=1;i<=n;i++){
beg[i]=End[i]=false;
x[i]=gyo();y[i]=gyo();z[i]=gyo();
if (z[i]-r<=0)
beg[i]=1;
if (z[i]+r>=h)
End[i]=true;
}um=4LL*r*r;
for (int i=1;i<=n;i++)
if (beg[i]==1)
dfs(i);
puts("No");}else{a:if(!setjmp(jp))goto b;puts("Yes");}
}
}