#include <bits/stdc++.h>
using namespace std;
using namespace std;
const int maxn = 200010;
int n, m, q, cnt, top, tim, now;
int lst[maxn], dfn[maxn], low[maxn];
int ss[maxn], bel[maxn];
int c[maxn], tot;
int dep[maxn], fa[maxn][20];
int f[maxn], g[maxn];
bool vis[maxn], ins[maxn];
struct edge {
  int to, nxt;
} e[maxn * 4];
void adde(int u, int v) {
  e[++cnt].to = v;
  e[cnt].nxt = lst[u];
  lst[u] = cnt;
  e[++cnt].to = u;
  e[cnt].nxt = lst[v];
  lst[v] = cnt;
}
void tarjan(int x, int from) {
  bel[x] = now;
  dfn[x] = low[x] = ++tim;
  ss[++top] = x;
  ins[x] = 1;
  for (int i = lst[x]; i; i = e[i].nxt) {
    if (i == (from ^ 1)) continue;
    if (!dfn[e[i].to]) {
      tarjan(e[i].to, i);
      low[x] = min(low[x], low[e[i].to]);
    } else if (ins[e[i].to])
      low[x] = min(low[x], dfn[e[i].to]);
  }
  if (dfn[x] == low[x]) {
    int y = 0;
    tot++;
    while (y != x) {
      y = ss[top];
      top--;
      c[y] = tot;
      ins[y] = 0;
    }
  }
}
void dfs(int x) {
  dep[x] = dep[fa[x][0]] + 1;
  for (int i = 1; i <= 18; i++) fa[x][i] = fa[fa[x][i - 1]][i - 1];
  for (int i = lst[x]; i; i = e[i].nxt)
    if (e[i].to != fa[x][0]) {
      fa[e[i].to][0] = x;
      dfs(e[i].to);
    }
}
int get_lca(int x, int y) {
  if (dep[x] < dep[y]) swap(x, y);
  for (int i = 18; i >= 0; i--)
    if (dep[fa[x][i]] >= dep[y]) x = fa[x][i];
  if (x == y) return x;
  for (int i = 18; i >= 0; i--)
    if (fa[x][i] != fa[y][i]) {
      x = fa[x][i];
      y = fa[y][i];
    }
  return fa[x][0];
}
void get(int x) {
  vis[x] = 1;
  for (int i = lst[x]; i; i = e[i].nxt) {
    if (vis[e[i].to]) continue;
    get(e[i].to);
    f[x] += f[e[i].to];
    g[x] += g[e[i].to];
  }
}
int main() {
  cnt = 1;
  cin >> n >> m >> q;
  for (int i = 1; i <= m; i++) {
    int x, y;
    cin >> x >> y;
    adde(x, y);
  }
  for (int i = 1; i <= n; i++)
    if (!dfn[i]) now++, tarjan(i, 0);
  memset(lst, 0, sizeof lst);
  int tmp = cnt;
  for (int i = 2; i <= tmp; i += 2) {
    int x = e[i].to, y = e[i ^ 1].to;
    if (c[x] != c[y]) adde(c[x], c[y]);
  }
  for (int i = 1; i <= tot; i++)
    if (!dep[i]) dfs(i);
  while (q--) {
    int x, y;
    cin >> x >> y;
    if (bel[x] != bel[y]) {
      puts("No");
      return 0;
    }
    x = c[x], y = c[y];
    int w = get_lca(x, y);
    f[x]++, f[w]--;
    g[y]++, g[w]--;
  }
  for (int i = 1; i <= tot; i++)
    if (!vis[i]) get(i);
  for (int i = 1; i <= tot; i++)
    if (f[i] && g[i]) {
      puts("No");
      return 0;
    }
  puts("Yes");
  return 0;
}
