#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define dim 50005
#define oo 0x3f3f3f3f
#include<queue>
using namespace std;
int *A[dim],*C[dim],n,m,s,t,T,best[dim],viz[dim],ok,i,x,y,c,V[dim];
queue<int> Q;
FILE *f=fopen("distante.in","r") ,*g=fopen("distante.out","w");
void citire()
{
fscanf(f,"%d %d %d",&n,&m,&s);
for(i=1;i<=n;i++)
{
fscanf(f,"%d",&V[i]);
A[i]=(int *)realloc(A[i],sizeof(int));
A[i][0]=0;
C[i]=(int *)realloc(C[i],sizeof(int));
C[i][0]=0;
}
for(i=1;i<=m;i++)
{
fscanf(f,"%d %d %d",&x,&y,&c);
if(x!=y)
{
A[x][0]++;
A[x]=(int *)realloc(A[x], (A[x][0]+1) * sizeof(int) );
A[x][ A[x][0] ]= y;
A[y][0]++;
A[y]=(int *)realloc(A[y], (A[y][0]+1) * sizeof(int) );
A[y][ A[y][0] ]= x;
C[x][0]++;
C[x]=(int *)realloc(C[x], (C[x][0]+1) * sizeof(int) );
C[x][ C[x][0] ]= c;
C[y][0]++;
C[y]=(int *)realloc(C[y], (C[y][0]+1) * sizeof(int) );
C[y][ C[y][0] ]= c;
}
}
}
void djkstra()
{
while(!Q.empty())
{
x=Q.front();
Q.pop();
viz[x]=0;
for(i=1;i<=A[x][0];i++)
{
y=A[x][i];
if(best[y] > best[x] + C[x][i] )
{
best[y] = best[x] + C[x][i];
if(!viz[y]) {Q.push(y); viz[y]=1;}
}
}
}
return ;
}
int main()
{
fscanf(f,"%d",&t);
for(T=1;T<=t;T++)
{
citire();
memset(best,oo,sizeof(best));
best[s]=0;
Q.push(s);
djkstra();
ok=1;
for(i=1;i<=n;i++)
{if(best[i]==oo)
best[i]=0;
if(best[i]!=V[i] )
{
fprintf(g,"NU\n");
ok=0;
break;
}
}
if(ok)
fprintf(g,"DA\n");
memset(viz,0,sizeof(viz));
memset(A,0,sizeof(A));
memset(C,0,sizeof(C));
}
fclose(f);
fclose(g);
return 0;
}