#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
const int N = 1e3 + 5;
typedef unsigned long long ll;
struct node {
ll x, y, z;
} a[N];
bool isjd[N];
ll n, h, r;
bool gett(ll i, ll j) {
return r * 2 >= sqrt(((a[i].x - a[j].x) * (a[i].x - a[j].x) + (a[i].y - a[j].y) * (a[i].y - a[j].y) +
(a[i].z - a[j].z) * (a[i].z - a[j].z)));
}
int main() {
int t;
cin >> t;
while (t --) {
memset(isjd, false, sizeof isjd);
cin >> n >> h >> r;
for (int i = 1; i <= n; i ++)
cin >> a[i].x >> a[i].y >> a[i].z;
for (int i = 1; i <= n; i ++)
if (a[i].z - r <= 0)
isjd[i] = true;
for (int i = 1; i <= n; i ++) {
if (isjd[i])
continue;
for (int j = 1; j <= n; j ++)
if (gett(i, j) && isjd[j])
isjd[i] = true;
}
bool flag = true;
for (int i = 1; i <= n; i ++)
if (a[i].z + r >= h && isjd[i]) {
cout << "Yes\n";
flag = false;
break;
}
if (flag)
cout << "No\n";
}
return 0;
}