#include<stdio.h>
const int nmax=50001;
const int INF=1000000000;
struct lista
{
int inf,c;
lista *urm;
};
lista *G[nmax];
int N,M,S,T;
int a[nmax],d[nmax],e[nmax],f[nmax],h[nmax],v[nmax],nh;
void cit()
{
int i,x,y,c;
lista *C[nmax];
scanf("%d%d%d",&N,&M,&S);
for(i=1;i<=N;i++)
{
if(G[i]) delete G[i];
G[i]=new lista;
G[i]->urm=NULL;
C[i]=G[i];
}
for(i=1;i<=N;i++)
scanf("%d",&a[i]);
for(i=1;i<=M;i++)
{
scanf("%d%d%d",&x,&y,&c);
C[x]->urm=new lista;
C[x]=C[x]->urm;
C[x]->inf=y;
C[x]->c=c;
C[x]->urm=NULL;
C[y]->urm=new lista;
C[y]=C[y]->urm;
C[y]->inf=x;
C[y]->c=c;
C[y]->urm=NULL;
}
}
void inters(int &x,int &y)
{
int aux=x;
x=y;
y=aux;
}
void cerne(int i)
{
int min,l,r;
l=2*i;
r=2*i+1;
if(l<=nh&&h[l]<h[i])
min=l;
else
min=i;
if(r<=nh&&h[r]<h[min])
min=r;
if(min!=i)
{
inters(h[i],h[min]);
inters(e[i],e[min]);
inters(f[e[i]],f[e[min]]);
cerne(min);
}
}
void Heap()
{
int i;
nh=N;
for(i=1;i<=nh/2;i++)
cerne(i);
}
void extrageMin()
{
h[1]=h[nh];
e[1]=e[nh];
f[e[1]]=1;
nh--;
cerne(1);
}
void urca(int i)
{
int p;
if(i%2)
p=(i-1)/2;
else
p=i/2;
if(h[i]<h[p])
{
inters(h[i],h[p]);
inters(e[i],e[p]);
inters(f[e[i]],f[e[p]]);
urca(p);
}
}
void relaxeaza(lista *c,int u)
{
if(v[c->inf]==0&&h[f[c->inf]]>d[u]+c->c)
{
d[c->inf]=d[u]+c->c;
h[f[c->inf]]=d[u]+c->c;
urca(f[c->inf]);
}
}
void dijkstra()
{
int i,u;
lista *c;
for(i=1;i<=N;i++)
{
d[i]=INF;
v[i]=0;
h[i]=INF;
e[i]=f[i]=i;
}
d[S]=0;
h[S]=0;
for(c=G[S]->urm;c;c=c->urm)
d[c->inf]=h[c->inf]=c->c;
Heap();
i=1;
for(i=1;i<=N;i++)
{
u=e[1];
d[u]=h[1];
v[u]=1;
extrageMin();
for(c=G[u]->urm;c;c=c->urm)
relaxeaza(c,u);
}
}
void scr()
{
int i,ok=1;
// for(i=1;i<=N;i++)
// printf("%d ",d[i]);
for(i=1;i<=N;i++)
if(a[i]!=d[i])
ok=0;
if(ok)
printf("DA\n");
else
printf("NU\n");
}
/*void scr2()
{
int i;
lista *c;
freopen("distante.out","w",stdout);
for(i=1;i<=N;i++)
printf("%d ",h[i]);
printf("\n");
for(i=1;i<=N;i++)
{
printf("%d:",i);
for(c=G[i]->urm;c;c=c->urm)
printf("(%d,%d) ",c->inf,c->c);
printf("\n");
}
}*/
int main()
{
int i;
freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
scanf("%d",&T);
for(i=1;i<=T;i++)
{
cit();
dijkstra();
scr();
//scr2();
}
fclose(stdout);
return 0;
}