#include <bits/stdc++.h>
int inp() {
  char c = getchar();
  while (c < '0' || c > '9') c = getchar();
  int sum = 0;
  while (c >= '0' && c <= '9') {
    sum = sum * 10 + c - '0';
    c = getchar();
  }
  return sum;
}
int dfn[200010], low[200010], bel[200010], st[200010];
int head[200010], nxt[400010], end[400010], fa[200010][21], depth[200010];
bool ins[200010];
std::map<std::pair<int, int>, bool> used;
int idx = 0, cnt = 0, top = 0;
void tarjan(int cur, int last) {
  dfn[cur] = low[cur] = ++idx;
  st[++top] = cur;
  ins[cur] = true;
  for (int x = head[cur]; x != -1; x = nxt[x]) {
    if (x != (last ^ 1)) {
      if (!dfn[end[x]]) {
        tarjan(end[x], x);
        low[cur] = std::min(low[cur], low[end[x]]);
      } else if (ins[end[x]])
        low[cur] = std::min(low[cur], dfn[end[x]]);
    }
  }
  if (dfn[cur] == low[cur]) {
    ++cnt;
    while (st[top] != cur) {
      bel[st[top]] = cnt;
      ins[st[top]] = false;
      top--;
    }
    top--;
    bel[cur] = cnt;
    ins[cur] = false;
  }
}
int cou = -1;
void link(int a, int b) {
  nxt[++cou] = head[a];
  head[a] = cou;
  end[cou] = b;
}
std::vector<std::pair<int, int> > vec;
int lca(int a, int b) {
  if (depth[a] < depth[b]) std::swap(a, b);
  int delta = depth[a] - depth[b];
  for (int i = 0; i <= 20; i++)
    if (delta & (1 << i)) a = fa[a][i];
  if (a == b) return a;
  for (int i = 20; i >= 0; i--)
    if (fa[a][i] != fa[b][i]) {
      a = fa[a][i];
      b = fa[b][i];
    }
  return fa[a][0];
}
void dfs(int cur, int last) {
  fa[cur][0] = last;
  depth[cur] = depth[last] + 1;
  for (int i = 1; i <= 20; i++) fa[cur][i] = fa[fa[cur][i - 1]][i - 1];
  for (int x = head[cur]; x != -1; x = nxt[x])
    if (end[x] != last) dfs(end[x], cur);
}
int sum1[200010], sum2[200010];
void dfs2(int cur, int last) {
  for (int x = head[cur]; x != -1; x = nxt[x]) {
    if (end[x] != last) {
      dfs2(end[x], cur);
      sum1[cur] += sum1[end[x]];
      sum2[cur] += sum2[end[x]];
    }
  }
}
int main() {
  memset(head, -1, sizeof(head));
  int n = inp();
  int m = inp();
  int q = inp();
  for (int i = 1; i <= m; i++) {
    int u = inp();
    int v = inp();
    link(u, v);
    link(v, u);
    vec.push_back(std::make_pair(u, v));
  }
  for (int i = 1; i <= n; i++)
    if (!dfn[i]) tarjan(i, -1);
  memset(head, -1, sizeof(head));
  cou = 0;
  for (int i = 0; i < vec.size(); i++)
    if (bel[vec[i].first] != bel[vec[i].second] &&
        !used[std::make_pair(bel[vec[i].first], bel[vec[i].second])]) {
      used[std::make_pair(bel[vec[i].first], bel[vec[i].second])] = true;
      link(bel[vec[i].first], bel[vec[i].second]);
      link(bel[vec[i].second], bel[vec[i].first]);
    }
  for (int i = 1; i <= cnt; i++)
    if (!fa[i][0]) dfs(i, 0);
  while (q--) {
    int u = bel[inp()];
    int v = bel[inp()];
    int _lca = lca(u, v);
    if (_lca == 0) {
      printf("No\n");
      return 0;
    }
    sum1[u]++;
    sum1[_lca]--;
    sum2[v]++;
    sum2[_lca]--;
  }
  for (int i = 1; i <= cnt; i++) {
    if (!fa[i][0]) dfs2(i, 0);
    if (sum1[i] && sum2[i]) {
      printf("No\n");
      return 0;
    }
  }
  printf("Yes\n");
}
