#include <bits/stdc++.h>
using namespace std;
#define int long long
#define vi vector<int>
#define vvi vector<vector<int>>
#define vii vector<pair<int, int>>
#define pii pair<int, int>
#define vc vector<char>
#define rep(i, a, b) for (int i = a; i < b; i++)
#define ff first
#define ss second
#define all(x) ((x).begin(), (x).end())
#define input(x) \
for (auto &i : x) \
cin >> i
const int N = 1e3 + 2, MOD = 1e9 + 7;
bool solve(vvi &adj, int n, vi &stren, vector<bool> &visi)
{
// rep(i, 0, n)
// {
// cout << stren[i] << " ";
// }
// cout << endl;
rep(s, 1, n + 1)
{
// cout << "src : " << s << endl;
bool flag = false;
vi d(n + 1, 0);
vi visited(n+1 , 0);
queue<int> q;
// vi divi;
if (visi[s] && stren[s] >= 0)
{
// cout << "1" << endl;
return false;
}
else if (!visi[s] && stren[s] >= 0)
{
visi[s] = true;
visited[s] = 1;
int temp;
q.push(s);
// divi.push_back(s);
// rep(i, 1, n + 1)
// {
// cout << d[i] << " ";
// }
// cout << endl;
while (!q.empty() && stren[s] > 0)
{
// for(auto i : divi) cout << i << " ";
// cout << endl;
temp = q.front();
// cout << "temp : " << temp << endl;
q.pop();
// divi.erase(divi.begin());
for (auto i : adj[temp])
{
// cout << "i : " << i << endl;
d[i] = d[temp] + 1;
if (d[i] > stren[s])
{
flag = true;
break;
}
else if (!visi[i] && stren[i] >= 0)
{
// cout << "2" << endl;
return false;
}
if (visi[i] && visited[i] == 0)
{
// cout << "3" << endl;
return false;
}
else if(!visited[i])
{
visi[i] = true;
visited[i] = 1;
q.push(i);
// divi.push_back(i);
// rep(i, 1, n + 1)
// {
// cout << d[i] << " ";
// }
// cout << endl;
}
}
if (flag)
break;
}
}
}
rep(i , 1 , n+1)
{
if(visi[i] == false) return false;
}
return true;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--)
{
int n, r, m;
cin >> n >> r >> m;
// if(n == 1)
// {
// if(m == 1)
// {
// cout << "Yes"
// }
// }
vvi adj(n + 1);
int a, b;
rep(i, 0, r)
{
cin >> a >> b;
adj[a].push_back(b);
adj[b].push_back(a);
}
int s, k;
vi stren(n + 1, -1);
vector <bool> check(n+1 , 0);
bool flag = false;
rep(i, 0, m)
{
cin >> k >> s;
if(check[k]) flag = true;
check[k] = true;
stren[k] = s;
}
vector<bool> visi(n + 1, false);
if(flag)
{
cout << "No" << endl;
continue;
}
if (solve(adj, n, stren, visi))
{
cout << "Yes" << endl;
}
else
{
cout << "No" << endl;
}
}
return 0;
}