#include <bits/stdc++.h>
using namespace std;
template <typename T1, typename T2>
inline T1 max(T1 a, T2 b) {
  return a < b ? b : a;
}
template <typename T1, typename T2>
inline T1 min(T1 a, T2 b) {
  return a < b ? a : b;
}
const char lf = '\n';
namespace ae86 {
const int bufl = 1 << 15;
char buf[bufl], *s = buf, *t = buf;
inline int fetch() {
  if (s == t) {
    t = (s = buf) + fread(buf, 1, bufl, stdin);
    if (s == t) return EOF;
  }
  return *s++;
}
inline int ty() {
  int a = 0;
  int b = 1, c = fetch();
  while (!isdigit(c)) b ^= c == '-', c = fetch();
  while (isdigit(c)) a = a * 10 + c - 48, c = fetch();
  return b ? a : -a;
}
}  // namespace ae86
using ae86::ty;
const int _ = 200007;
void failure(int x) {
  cout << (x ? "Yes" : "No") << lf;
  exit(0);
}
vector<pair<int, int>> e[_];
int ecnt = 0;
inline void adde(int a, int b) { e[a].emplace_back(b, ecnt); }
inline void addde(int a, int b) { ecnt++, adde(a, b), adde(b, a); }
int n, m, qn, lt[_] = {0}, clt = 0;
int dfn[_] = {0}, low[_] = {0}, dcnt = 0, stk[_] = {0}, instk[_] = {0}, top = 0;
int bcnt = 0, bel[_] = {0};
void dfs(int x, int lase) {
  lt[x] = clt, dfn[x] = low[x] = ++dcnt, stk[++top] = x, instk[x] = 1;
  for (auto [b, c] : e[x]) {
    if (c == lase) continue;
    if (!dfn[b])
      dfs(b, c), low[x] = min(low[x], low[b]);
    else if (instk[b])
      low[x] = min(low[x], dfn[b]);
  }
  if (dfn[x] == low[x]) {
    bcnt++;
    do {
      bel[stk[top]] = bcnt, instk[stk[top]] = 0;
    } while (stk[top--] != x);
  }
}
unordered_set<int> e2[_];
int fa[_] = {0}, dep[_] = {0}, sz[_] = {0}, mxch[_] = {0};
void dfs2(int x, int ff) {
  fa[x] = ff, dep[x] = dep[ff] + 1, sz[x] = 1, mxch[x] = 0;
  for (auto b : e2[x]) {
    if (b == ff) continue;
    dfs2(b, x), sz[x] += sz[b];
    if (sz[mxch[x]] < sz[b]) mxch[x] = b;
  }
}
int htop[_] = {0};
void dfs3(int x, int tp) {
  htop[x] = tp;
  if (mxch[x]) dfs3(mxch[x], tp);
  for (auto b : e2[x])
    if (b != fa[x] && b != mxch[x]) dfs3(b, b);
}
int lca(int a, int b) {
  while (htop[a] != htop[b]) {
    if (dep[htop[a]] < dep[htop[b]]) swap(a, b);
    a = fa[htop[a]];
  }
  if (dep[a] > dep[b]) swap(a, b);
  return a;
}
int hav[_] = {0}, chaf[_][2] = {0};
void dfs4(int x) {
  hav[x] = 1;
  for (auto b : e2[x])
    if (b != fa[x]) dfs4(b), chaf[x][0] += chaf[b][0], chaf[x][1] += chaf[b][1];
}
int main() {
  ios::sync_with_stdio(0), cout.tie(nullptr);
  n = ty(), m = ty(), qn = ty();
  for (int i = 1, a, b; i <= m; i++) a = ty(), b = ty(), addde(a, b);
  for (int i = 1; i <= n; i++)
    if (!dfn[i]) clt++, dfs(i, -1);
  for (int i = 1; i <= n; i++)
    for (auto [b, c] : e[i])
      if (bel[i] != bel[b])
        e2[bel[b]].emplace(bel[i]), e2[bel[i]].emplace(bel[b]);
  for (int i = 1; i <= bcnt; i++)
    if (!dep[i]) dfs2(i, 0), dfs3(i, i);
  for (int qq = 1; qq <= qn; qq++) {
    int a = ty(), b = ty();
    if (lt[a] != lt[b]) failure(0);
    a = bel[a], b = bel[b];
    int c = lca(a, b);
    chaf[a][0]++, chaf[c][0]--;
    chaf[b][1]++, chaf[c][1]--;
  }
  for (int i = 1; i <= bcnt; i++)
    if (!hav[i]) dfs4(i);
  for (int i = 1; i <= bcnt; i++)
    if (chaf[i][0] > 0 && chaf[i][1] > 0) failure(0);
  failure(1);
  return 0;
}
