#include<stdio.h>
#include<string.h>
#define INF 0x3f3f3f3f
struct edge{
int fr,to,val;
}e[5210];//邻接表
int n,m,w,l;
bool bellman()
{
int dis[510],f,t,v;
memset(dis,INF,sizeof(dis));
dis[1]=0;
for(int i=0;i<n-1;++i)//n-1次循环,松弛操作(一次所有边的遍历)
{
bool over=true;//一次循环中没有发生松弛,下一次也不会发生,每次松弛有赖于前面的松弛。
for(int j=0;j<l;++j)
{
f=e[j].fr;
t=e[j].to;
v=e[j].val;
if(dis[f]+v<dis[t])
{
dis[t]=dis[f]+v;
over=false;
}
}
if(over)
break;
}
for(int i=0;i<l;++i)
{
f=e[i].fr;
t=e[i].to;
v=e[i].val;
if(dis[f]+v<dis[t])
return true;
}
return false;
}
int main()
{
int f;
scanf("%d",&f);
while(f--)
{
int i,f,t,v;
l=0;
scanf("%d%d%d",&n,&m,&w);
for(i=0;i<m;i++)
{
scanf("%d%d%d",&f,&t,&v);
e[l].fr=f;
e[l].to=t;
e[l].val=v;
++l;
e[l].fr=t;
e[l].to=f;
e[l].val=v;
++l;
}
for(i=0;i<w;++i)
{
scanf("%d%d%d",&f,&t,&v);
e[l].fr=f;
e[l].to=t;
e[l].val=0-v;
++l;
}
if(bellman())
printf("YES\n");
else
printf("NO\n");
}
return 0;
}