#include<bits/stdc++.h>
using namespace std;
const int N = 1e7+5;
vector<int> adj[N];
int strength[N];
bool visited[N];
int parent[N];
int flag = 1;
void bfs(int node)
{
	queue<int> q;
	q.push(node);
	parent[node] = -1;
	while(!q.empty()){
		int cur_node = q.front();
		q.pop();
		if(strength[cur_node] == 0)
			continue;
		for(auto next_node : adj[cur_node]){
			if(next_node == parent[cur_node])
				continue;
			if(!visited[next_node]){
				visited[next_node] = true;
				strength[next_node] = strength[cur_node] - 1;
				parent[next_node] = cur_node;
				q.push(next_node);
			}
			else if(strength[next_node] != strength[cur_node] - 1 && parent[cur_node] != parent[next_node]){
				flag = 0;
				return;
			}
		}	
	}
}
int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	int t;
	cin >> t;
	while(t--){
		flag = 1;
		memset(visited,false,sizeof(visited));
		int n,r,m;
		cin >> n >> r >> m;
		for(int i = 0; i < N;i++){
			adj[i].clear();
		}
		for(int i = 0; i < r;i++){
			int u,v;
			cin >> u >> v;
			adj[u].push_back(v);
			adj[v].push_back(u);
		}
		memset(strength,-1,sizeof(strength));
		for(int i = 0; i < m;i++){
			int k,s;
			cin >> k >> s;
			if(visited[k])
				flag = 0;
			strength[k] = s;
			visited[k] = true;
			if(flag)
				bfs(k);
		}
		for(int i = 1; i <= n;i++){
			if(visited[i] == -1)
				flag = 0;
		}
		if(flag)
			puts("Yes");
		else
			puts("No");
	}
}