#include <bits/stdc++.h>
long long ago;
using namespace std;
long long int pw(long long int a, long long int b, long long int mod) {
  if (!b) return 1;
  if (b & 1) return a * pw(a * a % mod, b / 2, mod) % mod;
  return pw(a * a % mod, b / 2, mod) % mod;
}
const long long int MAXN = 2e5 + 10;
const long long int INF = 8e18;
const long long int MOD = 1e9 + 7;
const long long int LOG = 20;
int n, m, q, par[MAXN], dp[MAXN][LOG], ps[MAXN][2], mark[MAXN], markE[MAXN],
    H[MAXN];
vector<pair<int, int> > adj[MAXN];
vector<int> tadj[MAXN];
pair<int, int> Q[MAXN], E[MAXN];
int Find(int u) { return (par[u] == -1 ? u : par[u] = Find(par[u])); }
void Union(int u, int v) {
  int pu = Find(u), pv = Find(v);
  if (pu == pv) return;
  if (tadj[pv].size() > tadj[pu].size()) swap(pu, pv);
  par[pv] = pu;
  for (int w : tadj[pv]) {
    tadj[pu].push_back(w);
  }
}
void DFS1(int u) {
  mark[u] = 1;
  for (auto [v, ind] : adj[u]) {
    if (mark[v]) continue;
    tadj[u].push_back(v);
    H[v] = H[u] + 1;
    markE[ind] = 1;
    DFS1(v);
  }
}
void DFS2(int u, int p = 0) {
  mark[u] = 1;
  for (auto [v, ind] : adj[u]) {
    if (mark[v]) continue;
    DFS2(v, u);
    ps[u][0] += ps[v][0];
  }
  if (ps[u][0] > 0) Union(u, p);
}
void DFS3(int u, int p = 0) {
  mark[u] = 1;
  dp[u][0] = p;
  for (int i = 1; i < LOG; i++) dp[u][i] = dp[dp[u][i - 1]][i - 1];
  for (int v : tadj[u]) {
    v = Find(v);
    if (mark[v]) continue;
    H[v] = H[u] + 1;
    DFS3(v, u);
  }
}
int getPar(int u, int d) {
  for (int i = LOG; i--;) {
    if (d - (1ll << i) >= 0) d -= (1ll << i), u = dp[u][i];
  }
  return u;
}
int LCA(int u, int v) {
  if (H[v] < H[u]) swap(u, v);
  v = getPar(v, H[v] - H[u]);
  if (u == v) return u;
  for (int i = LOG; i--;) {
    if (dp[u][i] != dp[v][i]) u = dp[u][i], v = dp[v][i];
  }
  return dp[u][0];
}
void DFS4(int u) {
  mark[u] = 1;
  for (int v : tadj[u]) {
    v = Find(v);
    if (mark[v]) continue;
    DFS4(v);
    ps[u][0] += ps[v][0];
    ps[u][1] += ps[v][1];
  }
  if (ps[u][0] > 0 && ps[u][1] > 0) {
    cout << "No" << '\n';
    exit(0);
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  fill(par, par + MAXN, -1);
  cin >> n >> m >> q;
  for (int i = 0; i < m; i++) {
    int u, v;
    cin >> u >> v;
    E[i] = {u, v};
    adj[u].emplace_back(v, i);
    adj[v].emplace_back(u, i);
  }
  for (int i = 0; i < q; i++) {
    cin >> Q[i].first >> Q[i].second;
  }
  for (int i = 1; i <= n; i++) {
    if (!mark[i]) DFS1(i);
  }
  for (int i = 0; i < m; i++) {
    if (!markE[i]) {
      if (H[E[i].second] < H[E[i].first]) swap(E[i].first, E[i].second);
      ps[E[i].second][0]++;
      ps[E[i].first][0]--;
    }
  }
  fill(mark, mark + MAXN, 0);
  for (int i = 1; i <= n; i++) {
    if (!mark[i]) DFS2(i);
    ps[i][0] = 0;
  }
  fill(H, H + MAXN, 0);
  fill(mark, mark + MAXN, 0);
  for (int i = 1; i <= n; i++) {
    if (!mark[Find(i)]) DFS3(Find(i));
  }
  for (int i = 0; i < q; i++) {
    Q[i].first = Find(Q[i].first), Q[i].second = Find(Q[i].second);
    int w = LCA(Q[i].first, Q[i].second);
    if (w == 0) return cout << "No" << '\n', 0;
    ps[Q[i].first][0]++, ps[Q[i].second][1]++;
    ps[w][0]--, ps[w][1]--;
  }
  fill(mark, mark + MAXN, 0);
  for (int i = 1; i <= n; i++) {
    if (!mark[Find(i)]) DFS4(Find(i));
  }
  cout << "Yes" << '\n';
  return 0;
}
