#include<fstream>
#include<vector>
using namespace std;
int t,n,m,s,d[50001],x,y,c;
struct arc{ int nod,cost;};
vector <arc>l[50001];
ifstream in("distante.in"); ofstream out("distante.out");
int main(){
in>>t;
for(;t;--t){
in>>n>>m>>s; bool ok=true;
for(int i=1;i<=n;++i) in>>d[i];
if(d[s]!=0){ out<<"NU\n"; continue;}
for(int i=1;i<=m;++i){
in>>x>>y>>c;
if(d[x]+c<d[y]) ok=false;
l[x].push_back((arc){y,c});
l[y].push_back((arc){x,c});
}
for(y=1;y<=n;++y)
if(y!=s){
bool ok2=false;
for(vector <arc> :: iterator it=l[y].begin(); it!=l[y].end();++it){
if(d[(*it).nod]+(*it).cost==d[y])
ok2=true;
}
if(ok2==false) ok=false;
}
if(ok==true) out<<"DA\n"; else out<<"NU\n";
for(int i=1;i<=n;++i) l[i].clear();
}
}