#include <bits/stdc++.h>
using namespace std;
const int N = 201110;
int num[N], low[N], pos[N], dep[N], up[N], cha[N], anc[N][20];
vector<int> a[N], G[N];
stack<int> st;
int n, m, Q, k, ount = 0;
void NIE() {
  puts("No");
  exit(0);
}
void visit(int u, int par) {
  num[u] = low[u] = ++ount;
  st.push(u);
  int v, r;
  bool pre = false;
  for (int i = 0; i < a[u].size(); i++) {
    v = a[u][i];
    if (v != par || pre) {
      if (num[v])
        low[u] = min(low[u], num[v]);
      else {
        visit(v, u);
        low[u] = min(low[u], low[v]);
      }
    } else if (v == par)
      pre = true;
  }
  if (low[u] == num[u]) {
    k++;
    do {
      v = st.top();
      st.pop();
      pos[v] = k;
      num[v] = low[v] = n + 1;
      for (int i = 0; i < a[v].size(); i++) {
        r = pos[a[v][i]];
        if (r != 0 && r != k) {
          G[k].push_back(r);
          G[r].push_back(k);
        }
      }
    } while (v != u);
  }
}
void DFS(int u, int par) {
  for (int i = 1; i < 20; i++) anc[u][i] = anc[anc[u][i - 1]][i - 1];
  for (int i = 0; i < a[u].size(); i++) {
    int v = a[u][i];
    if (v != par) {
      anc[v][0] = u;
      dep[v] = dep[u] + 1;
      DFS(v, u);
    }
  }
}
int getbit(int x, int i) { return 1 & (x >> i); }
int lca(int u, int v) {
  if (dep[u] < dep[v]) return lca(v, u);
  int k = dep[u] - dep[v];
  for (int i = 0; i < 20; i++)
    if (getbit(k, i)) u = anc[u][i];
  if (u == v) return u;
  for (int i = 19; i >= 0; i--)
    if (anc[u][i] != anc[v][i]) {
      u = anc[u][i];
      v = anc[v][i];
    } else
      k = anc[u][i];
  return k;
}
void check(int u) {
  for (int i = 0; i < a[u].size(); i++) {
    int v = a[u][i];
    if (v != anc[u][0]) {
      check(v);
      if (dep[cha[v]] < dep[u]) {
        if (up[v] != 0 && up[u] == -up[v]) NIE();
        up[u] = up[v];
        if (dep[cha[u]] > dep[cha[v]]) cha[u] = cha[v];
      }
    }
  }
}
int main() {
  scanf("%d%d%d", &n, &m, &Q);
  int u, v, r;
  while (m--) {
    scanf("%d%d", &u, &v);
    a[u].push_back(v);
    a[v].push_back(u);
  }
  for (int i = 1; i <= n; i++)
    if (num[i] == 0) visit(i, i);
  n = k;
  for (int i = 1; i <= n; i++) a[i] = G[i], cha[i] = i;
  for (int i = 1; i <= n; i++)
    if (anc[i][0] == 0) DFS(i, i);
  while (Q--) {
    scanf("%d%d", &u, &v);
    u = pos[u];
    v = pos[v];
    if (u == v) continue;
    r = lca(u, v);
    if (r == 0) NIE();
    if (u != r) {
      if (up[u] == -1) NIE();
      up[u] = 1;
      if (dep[r] < dep[cha[u]]) cha[u] = r;
    }
    if (v != r) {
      if (up[v] == 1) NIE();
      up[v] = -1;
      if (cha[v] == 0)
        cha[v] = r;
      else if (dep[r] < dep[cha[v]])
        cha[v] = r;
    }
  }
  for (int i = 1; i <= n; i++)
    if (anc[i][0] == 0) check(i);
  puts("Yes");
  return 0;
}
