代码awa
#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <locale>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <typeinfo>
#include <utility>
#include <valarray>
#include <vector>
#define zyq 1536
using namespace std;
int fa[zyq];
struct point{
int x,y,z;
}p[zyq];
double dist(point a,point b){
return sqrt(pow(a.x-b.x,2)+pow(a.y-b.y,2)+pow(a.z-b.z,2));
}
int find(int k)
{
while(k!=fa[k]) k=fa[k]=fa[fa[k]];
return k;
}
void join(int x,int y){
if(find(x)!=find(y))
fa[find(y)]=find(x);
}
int t,n,h,r;
int ans[zyq];
int main(){
scanf("%d",&t);
while(t--){
scanf("%d %d %d",&n,&h,&r);
for(int i=1;i<=n+5;i++)fa[i]=i;
for(int i=1;i<=n;i++){
scanf("%d %d %d",&p[i].x,&p[i].y,&p[i].z);
}
int cnt=0;
bool qs=0;
for(int i=1;i<=n;i++){
if(p[i].z-r<=0){
for(int j=1;j<=n;j++){
if(dist(p[i],p[j])<=2*r){
join(i,j);
}
}
}
if(p[i].z+r>=h)ans[cnt++]=i;
}
for(int i=1;i<=n;i++){
for(int j=0;j<cnt;j++){
if(find(i)==find(ans[j])&&ans[j]!=i&&p[i].z-r<=0){
qs=1;break;
}
}
}
puts(qs?"Yes":"No");
}
return 0;
}