#include <bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:102400000,102400000")
const int MOD = 1e9 + 7;
const int N = 2e5 + 7;
vector<int> e[N];
int f[N];
int findx(int x) {
  if (x == f[x]) return x;
  return f[x] = findx(f[x]);
}
inline void unite(int x, int y) { f[findx(x)] = findx(y); }
int dfn[N], low[N], T = 0;
void dfs(int u, int f) {
  low[u] = dfn[u] = ++T;
  int p = f;
  for (int v : e[u]) {
    if (v == f) {
      f = -1;
      continue;
    }
    if (dfn[v])
      low[u] = min(low[u], dfn[v]);
    else {
      dfs(v, u);
      low[u] = min(low[u], low[v]);
    }
  }
  if (low[u] != dfn[u] && p) unite(p, u);
}
vector<int> g[N];
int dep[N];
int fa[N][20];
void dfs2(int u, int f) {
  dfn[u] = 1;
  dep[u] = dep[f] + 1;
  fa[u][0] = f;
  for (int i = int(1); i <= int(19); ++i)
    if (fa[u][i - 1]) fa[u][i] = fa[fa[u][i - 1]][i - 1];
  for (int v : g[u]) {
    if (v == f) continue;
    dfs2(v, u);
  }
}
int lca(int x, int y) {
  if (dep[x] < dep[y]) swap(x, y);
  for (int i = int(19); i >= int(0); --i)
    if (dep[x] - (1 << i) >= dep[y]) x = fa[x][i];
  if (x == y) return x;
  for (int i = int(19); i >= int(0); --i)
    if (fa[x][i] && fa[x][i] != fa[y][i]) x = fa[x][i], y = fa[y][i];
  return fa[x][0];
}
pair<int, int> pre[N];
void dfs3(int u, int f) {
  dfn[u] = 1;
  for (int v : g[u]) {
    if (v == f) continue;
    dfs3(v, u);
    pre[u].first += pre[v].first;
    pre[u].second += pre[v].second;
  }
}
int main() {
  int n, m, q;
  scanf("%d%d%d", &n, &m, &q);
  for (int i = int(1); i <= int(m); ++i) {
    int x, y;
    scanf("%d%d", &x, &y);
    e[x].push_back(y);
    e[y].push_back(x);
  }
  for (int i = int(1); i <= int(n); ++i) f[i] = i;
  for (int i = int(1); i <= int(n); ++i)
    if (!dfn[i]) dfs(i, 0);
  for (int i = int(1); i <= int(n); ++i)
    for (int v : e[i])
      if (findx(i) != findx(v)) g[findx(i)].push_back(findx(v));
  memset(dfn, 0, sizeof(dfn));
  for (int i = int(1); i <= int(n); ++i)
    if (i == findx(i) && !dfn[i]) dfs2(i, 0);
  for (int i = int(1); i <= int(q); ++i) {
    int x, y;
    scanf("%d%d", &x, &y);
    x = findx(x);
    y = findx(y);
    if (x == y) continue;
    int lc = lca(x, y);
    if (!lc) {
      puts("No");
      return 0;
    } else {
      pre[x].first++;
      pre[lc].first--;
      pre[y].second++;
      pre[lc].second--;
    }
  }
  memset(dfn, 0, sizeof(dfn));
  for (int i = int(1); i <= int(n); ++i)
    if (i == findx(i) && !dfn[i]) dfs3(i, 0);
  for (int i = int(1); i <= int(n); ++i)
    if (i == findx(i) && pre[i].first && pre[i].second) {
      puts("No");
      return 0;
    }
  puts("Yes");
  return 0;
}
