#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <vector>
#include <map>
#include <iostream>
#include <algorithm>
using namespace std;
const int N=305*2;
const double eps=1e-6;
struct edge{int x,y;edge *next;}g[N*N*2],*ls[N];
struct circle_t{double x,y,r;}C[N],S;
int n,e;
int v[N][2];
template <class T> T sqr(T x){return x*x;}
template <class T> T abs(T x){return (x<0)?-x:x;}

void init(){
    scanf("%d",&n);
    for (int i=1;i<=n;i++)
      scanf("%lf %lf %lf",&C[i].x,&C[i].y,&C[i].r);
    scanf("%lf %lf %lf",&S.x,&S.y,&S.r);
    for (int i=1;i<=n;i++) C[i].r+=S.r;
}

void addedge(int x,int y){
    g[++e].x=x; g[e].y=y; g[e].next=ls[x]; ls[x]=&g[e];
}

void build(){
    e=0; memset(ls,0,sizeof(ls));
    int i,j;
    for (i=1;i<=n;i++)
      for (j=1;j<=n;j++) if (i!=j)
        if ( sqr(C[i].x-C[j].x)+sqr(C[i].y-C[j].y) + eps <= sqr(C[i].r+C[j].r) )
          addedge(i,j);
}

double X(circle_t p0,circle_t p1,circle_t p2){
    return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
}

int Get_key(int i,int j){
    if (C[i].x>C[j].x) swap(i,j);
    if (abs(C[i].x-C[j].x)<eps) return 0;
    if (abs(C[j].x-    S.x)<eps) return 0;
    if (C[i].x-eps<=S.x && C[j].x+eps>=S.x && X(C[j],C[i],S)-eps<0 ) return 1;
    return 0;
}

void dfs(int p,int s){
    if (v[p][s]) return;
    v[p][s]=1;
    for (edge *t=ls[p];t;t=t->next){
        int key=Get_key(t->x,t->y);
        dfs(t->y,s^key);
    }
}

int main(){
    int Tc;
    scanf("%d",&Tc);
    while (Tc--){
        init();
        build();
        bool check=false;
        for (int i=1;i<=n;i++){
          memset(v,0,sizeof(v));
          dfs(i,0);
          if (v[i][1]) check=true;
        }
        if (!check) puts("YES");
               else puts("NO");
        if (Tc) puts("");
    }
}