#include <fstream>
#include <queue>
#include <vector>
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
const int N=50005, INF=0x3F3F3F3F;
int n, m, t, s, dmin[N];
vector<pair<int,int>> a[N];
vector<int> dijkstra(int n, int s, vector <pair<int,int>> ad[])
{
priority_queue<pair<int,int>> pq;
pq.push(make_pair(0, s));
vector<int> d(n+1,INF);
d[s]=0;
while(pq.size())
{
int nod=pq.top().second;
int dist=-pq.top().first;
pq.pop();
if(dist!=d[nod])
continue;
for(pair<int,int> v:ad[nod])
{
if(d[nod]+v.second<d[v.first])
{
d[v.first]=d[nod]+v.second;
pq.push(make_pair(-d[v.first], v.first));
}
}
}
return d;
}
int main()
{
fin>>t;
for(int k=0;k<t;++k)
{
fin>>n>>m>>s;
for(int i=1;i<=n;++i)
fin>>dmin[i];
for(int i=0;i<m;++i)
{
int x, y, z;
fin>>x>>y>>z;
a[x].push_back(make_pair(y, z));
a[y].push_back(make_pair(x, z));
}
bool ok=true;
vector<int> d;
d=dijkstra(n, s, a);
for(int i=1;i<=n;++i)
if(d[i]!=dmin[i])
{
ok=false;
break;
}
if(ok)fout<<"DA\n";
else fout<<"NU\n";
}
return 0;
}