#include <bits/stdc++.h>
using namespace std;
int son[400005], Top[400005], dep[400005], siz[400005];
int q, h[400005], cnt = 1, num, tot, bl[400005];
int n, m, dfn[400005], low[400005], stk[400005], top;
int fa[400005], cf1[400005], cf2[400005], cal[400005], prt[400005];
vector<int> p[400005];
struct node {
  int to, from, next;
} e[400005 << 1];
inline int read() {
  int s = 0, f = 0;
  char ch = getchar();
  while (ch < 48 || ch > 57) f = (ch == '-'), ch = getchar();
  while (ch > 47 && ch < 58)
    s = (s << 1) + (s << 3) + (ch ^ 48), ch = getchar();
  return f ? -s : s;
}
int Getprt(int x) { return prt[x] == x ? x : prt[x] = Getprt(prt[x]); }
void Addedge(int x, int y) {
  prt[Getprt(x)] = Getprt(y);
  e[++cnt] = (node){y, x, h[x]}, h[x] = cnt;
  e[++cnt] = (node){x, y, h[y]}, h[y] = cnt;
}
void Tarjan(int x, int fa) {
  dfn[x] = low[x] = ++tot, stk[++top] = x;
  for (int i = h[x], y; i; i = e[i].next)
    if (i != fa) {
      if (!dfn[y = e[i].to])
        Tarjan(y, i ^ 1), low[x] = min(low[x], low[y]);
      else
        low[x] = min(low[x], dfn[y]);
    }
  if (dfn[x] == low[x]) {
    int y;
    ++num;
    do bl[y = stk[top--]] = num;
    while (y != x);
  }
}
void Dfs1(int x, int prt) {
  dep[x] = dep[fa[x] = prt] + (siz[x] = 1);
  for (int y : p[x])
    if (y != prt)
      Dfs1(y, x), siz[x] += siz[y], siz[y] > siz[son[x]] && (son[x] = y);
}
void Dfs2(int x, int tp) {
  dfn[x] = ++cnt, Top[x] = tp;
  if (son[x]) Dfs2(son[x], tp);
  for (int y : p[x])
    if (y != fa[x] && y != son[x]) Dfs2(y, y);
}
int Lca(int x, int y) {
  while (Top[x] != Top[y])
    if (dep[Top[x]] > dep[Top[y]])
      x = fa[Top[x]];
    else
      y = fa[Top[y]];
  return dep[x] < dep[y] ? x : y;
}
void Dfs(int x) {
  for (int y : p[x])
    if (y != fa[x]) Dfs(y), cf1[x] += cf1[y], cf2[x] += cf2[y];
  if (cf1[x] && cf2[x]) puts("No"), exit(0);
}
int main() {
  n = read(), m = read(), q = read();
  for (int i = 1; i <= n; ++i) prt[i] = i;
  for (int i = 1; i <= m; ++i) Addedge(read(), read());
  Tarjan(1, 0);
  for (int i = 2; i <= cnt; ++i)
    if (bl[e[i].to] != bl[e[i].from]) p[bl[e[i].from]].push_back(bl[e[i].to]);
  cnt = 0;
  for (int i = 1; i <= tot; ++i)
    if (!Top[i]) cal[i] = 1, Dfs1(i, 0), Dfs2(i, i);
  for (int i = 1, x, y, lca; i <= q; ++i) {
    if (Getprt(x = read()) != Getprt(y = read())) return puts("No"), 0;
    x = bl[x], y = bl[y], lca = Lca(x, y);
    ++cf1[x], --cf1[lca], ++cf2[y], --cf2[lca];
  }
  for (int i = 1; i <= tot; ++i)
    if (cal[i]) Dfs(i);
  puts("Yes");
  return 0;
}
