#include <bits/stdc++.h>
using namespace std;
ifstream in("distante.in");
ofstream out("distante.out");
int t,n,m,s,x,y,d[50005],d1[50005],ok[50005],k,c;
vector<pair<int,int>> v[50005];
priority_queue< pair<int,int> ,vector<pair<int,int>> ,greater<pair<int,int>>> q;
pair<int,int> z;
void dijkstra(int nod)
{
d1[nod]=0;
q.push({0,nod});
while(!q.empty())
{
z=q.top();
q.pop();
if(ok[z.second]==1) continue;
ok[z.second]=1;
for(auto it:v[z.second])
{
if(ok[it.second]==0&&d1[it.second]>d1[z.second]+it.first)
{
d1[it.second]=d1[z.second]+it.first;
q.push({d1[it.second],it.second});
}
}
}
}
int main()
{
in>>t;
while(t--)
{
in>>n>>m>>s;
for(int i=1;i<=n;i++) {
in>>d[i];
d1[i]=1e9;
ok[i]=0;
v[i].clear();
}
k=1;
for(int i=1;i<=m;i++)
{
in>>x>>y>>c;
v[x].push_back({c,y});
v[y].push_back({c,x});
}
while(!q.empty()) q.pop();
dijkstra(s);
for(int i=1;i<=n;i++) {
if(d1[i]!=d[i]) k=0;
}
if(k) out<<"DA"<<'\n';
else out<<"NU"<<'\n';
}
return 0;
}