#include <bits/stdc++.h>
using namespace std;
const int N = 200200;
int n, m, u, v, w, tp, ti, cc, Q, fl = 1;
int hd[N], df[N], lo[N], st[N], c[N], fa[N];
int we[N], d[N], f[N], g[N], sz[N], top[N];
struct edge {
  int n, v;
} e[N << 1];
struct edg {
  int u, v;
};
vector<edg> E;
void add(int u, int v) {
  e[++fl] = (edge){hd[u], v};
  hd[u] = fl;
}
void tarjan(int u, int f, int w) {
  df[u] = lo[u] = ++ti;
  st[++tp] = u;
  for (int i = hd[u], v; v = e[i].v, i; i = e[i].n)
    if (i ^ f ^ 1) {
      if (!df[v]) {
        tarjan(v, i, u);
        lo[u] = min(lo[u], lo[v]);
      } else
        lo[u] = min(lo[u], df[v]);
    }
  if (df[w] < lo[u]) {
    ++cc;
    for (int x, y = 0; x = st[tp], y ^ u; y = x, tp--) c[x] = cc;
    if (w) E.push_back((edg){w, u});
  }
}
void dfs1(int u) {
  sz[u] = 1;
  for (int i = hd[u], v; v = e[i].v, i; i = e[i].n) {
    d[v] = d[u] + 1;
    dfs1(v);
    sz[u] += sz[v];
    if (sz[v] > sz[we[u]]) we[u] = v;
  }
}
void dfs2(int u, int TP) {
  top[u] = TP;
  if (we[u]) dfs2(we[u], TP);
  for (int i = hd[u], v; v = e[i].v, i; i = e[i].n)
    if (v != we[u]) dfs2(v, v);
}
int lca(int u, int v) {
  for (; top[u] ^ top[v]; u = fa[top[u]])
    if (d[top[u]] < d[top[v]]) swap(u, v);
  return d[u] < d[v] ? u : v;
}
void ins(int u, int D, int w) {
  if (f[u] * w < 0) puts("No"), exit(0);
  f[u] = w;
  g[u] = (g[u] < (D) ? g[u] : (D));
}
void dfs3(int u) {
  for (int i = hd[u], v; v = e[i].v, i; i = e[i].n) {
    dfs3(v);
    if (g[v] < d[u]) {
      if (f[u] * f[v] < 0) puts("No"), exit(0);
      f[u] = f[v];
      g[u] = (g[u] < (g[v]) ? g[u] : (g[v]));
    }
  }
}
int main() {
  scanf("%d%d%d", &n, &m, &Q);
  for (int i = 1; i <= m; i++) scanf("%d%d", &u, &v), add(u, v), add(v, u);
  for (int i = 1; i <= n; i++)
    if (!df[i]) tarjan(i, 0, 0);
  for (int i = 1; i <= n; i++) hd[i] = 0;
  fl = 0;
  n = cc;
  for (edg e : E) u = c[e.u], v = c[e.v], add(u, v), fa[v] = u;
  for (int i = 1; i <= n; i++)
    if (!fa[i]) d[i] = 1, dfs1(i), dfs2(i, i);
  for (int i = 1; i <= n; i++) g[i] = d[i];
  for (int i = 1; i <= Q; i++) {
    scanf("%d%d", &u, &v);
    u = c[u], v = c[v], w = lca(u, v);
    if (!w) puts("No"), exit(0);
    if (u ^ w) ins(u, d[w], +1);
    if (v ^ w) ins(v, d[w], -1);
  }
  for (int i = 1; i <= n; i++)
    if (!fa[i]) dfs3(i);
  puts("Yes");
}
