#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5 + 10;
int n, m, q;
vector<int> k[MAXN];
vector<int> pk[MAXN];
int s[MAXN], d[MAXN];
int dag[MAXN];
int fi[MAXN], lo[MAXN];
bool ne[MAXN], vis[MAXN];
int tarjp[MAXN];
int ti, cnt;
int p[MAXN][20];
int dep[MAXN];
int up[MAXN], down[MAXN];
bool can = true;
set<pair<int, int> > pai;
set<pair<int, int> > no;
void tarj(int v) {
  fi[v] = lo[v] = ++ti;
  for (int u : k[v]) {
    if (!fi[u]) {
      tarjp[u] = v;
      tarj(u);
      if (lo[u] > fi[v] && !no.count({u, v})) ne[u] = true;
      lo[v] = min(lo[v], lo[u]);
    } else if (tarjp[v] != u)
      lo[v] = min(lo[v], fi[u]);
  }
}
void create(int v, int typ) {
  vis[v] = true;
  dag[v] = typ;
  for (int u : k[v]) {
    if (!vis[u] && ne[u]) {
      ++cnt;
      pk[typ].push_back(cnt);
      pk[cnt].push_back(typ);
      create(u, cnt);
    } else if (!vis[u])
      create(u, typ);
  }
}
void fiPars(int v, int pa) {
  p[v][0] = pa;
  for (int u : pk[v])
    if (u != pa) {
      dep[u] = dep[v] + 1;
      fiPars(u, v);
    }
}
void go(int v) {
  vis[v] = true;
  for (int u : pk[v]) {
    if (p[v][0] != u) {
      go(u);
      up[v] += up[u];
      down[v] += down[u];
    }
  }
  if (up[v] > 0 && down[v] > 0) {
    can = false;
  }
}
void reset() {
  for (int i = 0; i < MAXN; i++) vis[i] = false;
}
int lca(int a, int b) {
  if (dep[b] < dep[a]) swap(a, b);
  for (int i = 19; i >= 0; i--)
    if (dep[p[b][i]] >= dep[a]) b = p[b][i];
  for (int i = 19; i >= 0; i--)
    if (p[a][i] != p[b][i]) {
      a = p[a][i];
      b = p[b][i];
    }
  int how = 10;
  while (a != b && how--) {
    a = p[a][0];
    b = p[b][0];
  }
  if (a != b) {
    can = false;
    return MAXN - 1;
  }
  return a;
}
int main() {
  scanf(" %d %d %d", &n, &m, &q);
  for (int i = 0; i < m; i++) {
    int a, b;
    scanf(" %d %d", &a, &b);
    k[a].push_back(b);
    k[b].push_back(a);
    if (pai.count({a, b})) {
      no.insert({a, b});
      no.insert({b, a});
    }
    pai.insert({a, b});
    pai.insert({b, a});
  }
  for (int i = 1; i <= n; i++)
    if (!fi[i]) tarj(i);
  for (int i = 1; i <= n; i++)
    if (!vis[i]) create(i, ++cnt);
  for (int i = 1; i <= cnt; i++)
    if (!p[i][0]) fiPars(i, i);
  for (int first = 1; first < 20; first++)
    for (int i = 1; i <= cnt; i++) p[i][first] = p[p[i][first - 1]][first - 1];
  for (int i = 0; i < q; i++) {
    scanf(" %d %d", &s[i], &d[i]);
    s[i] = dag[s[i]];
    d[i] = dag[d[i]];
    up[s[i]]++;
    down[d[i]]++;
    int l = lca(s[i], d[i]);
    up[l]--;
    down[l]--;
  }
  reset();
  for (int i = 1; i <= cnt; i++)
    if (!vis[i]) go(i);
  if (can)
    printf("Yes\n");
  else
    printf("No\n");
}
