#include <bits/stdc++.h>
using namespace std;
const int inf = 1e9 + 333;
const long long linf = 1e18 + 333;
const int N = 2e5 + 5;
int n, m, q, ptr, sz, cnt, comp;
int h[N], id[N], low[N], vec[N], bcc[N], up[N], down[N], gr[N];
pair<int, int> edges[N];
vector<pair<int, int> > v[N];
vector<int> t[N], qu[N];
int f(int x) {
  if (x == gr[x]) return x;
  return gr[x] = f(gr[x]);
}
void dfs(int par, int x) {
  h[x] = 1;
  vec[sz++] = x;
  id[x] = ++ptr;
  low[x] = id[x];
  for (__typeof((v[x]).begin()) it = (v[x]).begin(); it != (v[x]).end(); it++) {
    int u = it->first;
    int e = it->second;
    if (e == par) continue;
    if (h[u])
      low[x] = min(low[x], id[u]);
    else {
      dfs(e, u);
      low[x] = min(low[x], low[u]);
    }
  }
  if (low[x] == id[x]) {
    cnt++;
    while (vec[sz] != x) bcc[vec[--sz]] = cnt;
  }
}
void dfs2(int par, int x) {
  h[x] = comp;
  gr[x] = x;
  for (__typeof((qu[x]).begin()) it = (qu[x]).begin(); it != (qu[x]).end();
       it++) {
    int u = *it;
    if (gr[u]) {
      int lca = f(u);
      up[lca]--;
      down[lca]--;
    }
  }
  for (__typeof((t[x]).begin()) it = (t[x]).begin(); it != (t[x]).end(); it++) {
    int u = *it;
    if (u == par) continue;
    dfs2(x, u);
    gr[u] = x;
  }
}
void dfs3(int par, int x) {
  h[x] = 1;
  for (__typeof((t[x]).begin()) it = (t[x]).begin(); it != (t[x]).end(); it++) {
    int u = *it;
    if (u == par) continue;
    dfs3(x, u);
    up[x] += up[u];
    down[x] += down[u];
  }
  if (up[x] > 0 and down[x] > 0) {
    puts("No");
    exit(0);
  }
}
int main() {
  scanf("%d %d %d", &n, &m, &q);
  for (int i = 1; i <= m; i++) {
    int x, y;
    scanf("%d %d", &x, &y);
    v[x].push_back(pair<int, int>(y, i));
    v[y].push_back(pair<int, int>(x, i));
    edges[i] = pair<int, int>(x, y);
  }
  for (int i = 1; i <= n; i++)
    if (!h[i]) {
      comp++;
      dfs(0, i);
    }
  for (int i = 1; i <= m; i++) {
    int x = edges[i].first;
    int y = edges[i].second;
    if (bcc[x] != bcc[y]) {
      t[bcc[x]].push_back(bcc[y]);
      t[bcc[y]].push_back(bcc[x]);
    }
  }
  for (int i = 1; i <= q; i++) {
    int x, y;
    scanf("%d %d", &x, &y);
    if (h[x] != h[y]) {
      puts("No");
      exit(0);
    }
    x = bcc[x];
    y = bcc[y];
    if (x == y) continue;
    up[x]++;
    down[y]++;
    qu[x].push_back(y);
    qu[y].push_back(x);
  }
  memset(h, 0, sizeof(h));
  for (int i = 1; i <= cnt; i++)
    if (!h[i]) dfs2(0, i);
  memset(h, 0, sizeof(h));
  for (int i = 1; i <= cnt; i++)
    if (!h[i]) dfs3(0, i);
  puts("Yes");
  return 0;
}
