#include <bits/stdc++.h>
using namespace std;
template <typename T>
void read(T &x) {
  x = 0;
  int f(1);
  char c = getchar();
  for (; !isdigit(c); c = getchar())
    if (c == '-') f = -1;
  for (; isdigit(c); c = getchar()) x = (x << 3) + (x << 1) + c - '0';
  x *= f;
}
const int maxn = 200005;
int n, m, hd[maxn], cnt, tot, cnm, lg[maxn];
int fa[maxn][18], fg[maxn][2];
int dfn[maxn], low[maxn], col[maxn];
struct edge {
  int ed, nxt;
} e[2 * maxn];
int hd1[maxn], cnt1;
edge e1[2 * maxn];
struct Edge {
  int u, v;
};
void star(int u, int v) {
  e[++cnt].ed = v;
  e[cnt].nxt = hd[u];
  hd[u] = cnt;
  e[++cnt].ed = u;
  e[cnt].nxt = hd[v];
  hd[v] = cnt;
}
void star1(int u, int v) {
  e1[++cnt1].ed = v;
  e1[cnt1].nxt = hd1[u];
  hd1[u] = cnt1;
}
int bridge[2 * maxn];
void tarjan(int, int);
void g_color(int);
void dfs(int, int);
int LCA(int x, int y);
bool judge(int);
int main() {
  int Q;
  read(n);
  read(m);
  read(Q);
  cnt = 1;
  for (int i(1); i <= m; ++i) {
    int u, v;
    read(u);
    read(v);
    star(u, v);
  }
  for (int i(1); i <= n; ++i) lg[i] = lg[i - 1] + ((1 << lg[i - 1]) == i);
  for (int i(1); i <= n; ++i)
    if (!dfn[i]) tarjan(i, -1);
  for (int i(1); i <= n; ++i)
    if (!col[i]) ++cnm, g_color(i);
  for (int i(1); i <= n; ++i)
    for (int j = hd[i]; j; j = e[j].nxt) {
      int k = e[j].ed;
      if (col[i] == col[k]) continue;
      star1(col[i], col[k]);
    }
  memset(low, 0, sizeof low);
  tot = 0;
  dfn[0] = -1;
  for (int i(1); i <= cnm; ++i)
    if (!low[i]) ++tot, dfs(i, 0);
  for (int i(1); i <= Q; ++i) {
    int u, v;
    read(u);
    read(v);
    if (col[u] == col[v]) continue;
    u = col[u];
    v = col[v];
    if (low[u] != low[v]) return puts("No"), 0;
    int z = LCA(u, v);
    ++fg[u][0];
    --fg[z][0];
    ++fg[v][1];
    --fg[z][1];
  }
  for (int i(1); i <= cnm; ++i)
    if (dfn[i] == 0 && !judge(i)) return puts("No"), 0;
  puts("Yes");
  return 0;
}
void tarjan(int x, int le) {
  dfn[x] = low[x] = ++tot;
  for (int i = hd[x]; i; i = e[i].nxt) {
    int y = e[i].ed;
    if (!dfn[y]) {
      tarjan(y, i);
      low[x] = min(low[x], low[y]);
      if (low[y] > dfn[x]) bridge[i] = bridge[i ^ 1] = 1;
    } else if (i != (le ^ 1))
      low[x] = min(low[x], dfn[y]);
  }
}
void g_color(int x) {
  col[x] = cnm;
  for (int i = hd[x]; i; i = e[i].nxt) {
    int y = e[i].ed;
    if (bridge[i]) continue;
    if (col[y]) continue;
    g_color(y);
  }
}
void dfs(int x, int f) {
  fa[x][0] = f;
  dfn[x] = dfn[f] + 1;
  low[x] = tot;
  for (int i(1); i < lg[dfn[x]]; ++i) fa[x][i] = fa[fa[x][i - 1]][i - 1];
  for (int i = hd1[x]; i; i = e1[i].nxt) {
    int y = e1[i].ed;
    if (y == f) continue;
    dfs(y, x);
  }
}
int LCA(int x, int y) {
  while (dfn[x] != dfn[y]) {
    if (dfn[x] < dfn[y]) swap(x, y);
    x = fa[x][lg[dfn[x] - dfn[y]] - 1];
  }
  if (x == y) return x;
  for (int i = lg[dfn[x]] - 1; i >= 0; --i) {
    if (fa[x][i] == fa[y][i]) continue;
    x = fa[x][i];
    y = fa[y][i];
  }
  return fa[x][0];
}
bool judge(int x) {
  for (int i = hd1[x]; i; i = e1[i].nxt) {
    int y = e1[i].ed;
    if (y == fa[x][0]) continue;
    if (!judge(y) || (fg[y][0] && fg[y][1])) return 0;
    fg[x][0] += fg[y][0];
    fg[x][1] += fg[y][1];
  }
  return 1;
}
