#include <bits/stdc++.h>
#define nmx 50005
#define inf 2000000000
using namespace std;
int n,m,s,rs[nmx],mind[nmx];
vector <pair<int,int>> v[nmx];
void dijk(int source)
{
for (int i=1; i<=n; i++)
mind[i]=inf;
priority_queue <pair<int,int>> pq;
mind[source]=0;
pq.push({0,source});
while (!pq.empty())
{
auto u=pq.top();
pq.pop();
if (-u.first>mind[u.second])
continue;
for (auto it : v[u.second])
{
if (mind[u.second]+it.first<mind[it.second])
{
mind[it.second]=mind[u.second]+it.first;
pq.push({-mind[it.second],it.second});
}
}
}
}
int t,a,b,c;
int main()
{
ifstream f ("distante.in");
ofstream g ("distante.out");
f>>t;
while (t--)
{
f>>n>>m>>s;
for (int i=1; i<=n; i++)
v[i].clear();
for (int i=1; i<=n; i++)
f>>rs[i];
for (int i=1; i<=m; i++)
{
f>>a>>b>>c;
v[a].push_back({c,b});
v[b].push_back({c,a});
}
dijk(s);
int ok=1;
for (int i=1; i<=n; i++)
if (mind[i]!=rs[i]) ok=0;
if (ok) g<<"DA"<<'\n';
else g<<"NU"<<'\n';
}
}