#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <queue>
#include <algorithm>
#define int long long
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
const int inf=0x3f3f3f3f;
const int maxn=1e6+5;
int tot,dis[maxn],head[maxn],num[maxn],vis[maxn];
int n,m,w;
struct node {
int v,w,nxt;
} e[maxn];
void add(int u,int v,int w) {
e[tot].v=v;
e[tot].w=w;
e[tot].nxt=head[u];
head[u]=tot++;
}
bool spfa() {
memset(vis,0,sizeof(vis));
memset(num,0,sizeof(num));
queue<int>q;
dis[1]=0;
for(int i=1;i<=n;i++)q.push(i),vis[i]=1;
while(q.size()) {
int u=q.front();
q.pop();
vis[u]=0;
for(int i=head[u]; i!=-1; i=e[i].nxt) {
int v=e[i].v;
if(dis[v]>dis[u]+e[i].w) {
dis[v]=dis[u]+e[i].w;
num[v]=num[u]+1;
if(num[v]>n)return true;
if(!vis[v]) {
vis[v]=1;
q.push(v);
}
}
}
}
return false;
}
main() {
IOS;
int t;
cin>>t;
while(t--) {
cin>>n>>m>>w;
tot=1;
memset(head,-1,sizeof(head));
for(int i=1; i<=n; i++)dis[i]=inf;
for(int i=1; i<=m; i++) {
int x,y,z;
cin>>x>>y>>z;
add(x,y,z);
add(y,x,z);
}
for(int i=1; i<=w; i++) {
int x,y,z;
cin>>x>>y>>z;
add(x,y,-z);
}
if(spfa())cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
}