#include <bits/stdc++.h>
using namespace std;
const int N = 200005;
int n, m, q;
vector<int> g[N];
int p[N];
int f(int u) { return u == p[u] ? u : p[u] = f(p[u]); }
int vis[N], cnt[N];
int dfs(int u, int par) {
  vis[u] = 1;
  int up = 0;
  for (int v : g[u])
    if (v != par) {
      if (vis[v] == 1) {
        up++;
        cnt[v]--;
      } else if (vis[v] == 0) {
        up += dfs(v, u);
      }
    }
  vis[u] = 2;
  up += cnt[u];
  if (up) p[f(u)] = f(par);
  return up;
}
vector<int> h[N];
set<int> st[N], en[N];
void solve(int u, int par) {
  vis[u] = 1;
  for (int v : h[u])
    if (v != par) {
      assert(vis[v] == 0);
      solve(v, u);
      if (st[u].size() < st[v].size()) {
        swap(st[u], st[v]);
      }
      for (int val : st[v]) st[u].insert(val);
      st[v].clear();
      if (en[u].size() < en[v].size()) {
        swap(en[u], en[v]);
      }
      for (int val : en[v]) en[u].insert(val);
      en[v].clear();
    }
  if (st[u].size() < en[u].size()) {
    for (int val : st[u]) {
      auto it = en[u].find(val);
      if (it == en[u].end()) {
        printf("No\n");
        exit(0);
      }
      en[u].erase(it);
    }
    st[u].clear();
  } else if (st[u].size() > en[u].size()) {
    for (int val : en[u]) {
      auto it = st[u].find(val);
      if (it == st[u].end()) {
        printf("No\n");
        exit(0);
      }
      st[u].erase(it);
    }
    en[u].clear();
  } else {
    if (st[u] != en[u]) {
      printf("No\n");
      exit(0);
    }
    st[u].clear();
    en[u].clear();
  }
}
int main() {
  scanf("%d %d %d", &n, &m, &q);
  for (int i = 0; i < m; i++) {
    int u, v;
    scanf("%d %d", &u, &v);
    g[u].push_back(v);
    g[v].push_back(u);
  }
  for (int i = 1; i <= n; i++) p[i] = i;
  for (int i = 1; i <= n; i++) {
    sort(g[i].begin(), g[i].end());
    int last = -1;
    for (int v : g[i]) {
      if (last == v) {
        p[f(v)] = f(i);
      }
      last = v;
    }
  }
  for (int i = 1; i <= n; i++)
    if (!vis[i]) {
      dfs(i, i);
    }
  for (int i = 1; i <= n; i++) {
    for (int v : g[i])
      if (f(i) != f(v)) {
        h[f(i)].push_back(f(v));
      }
  }
  for (int i = 1; i <= n; i++) {
    sort(h[i].begin(), h[i].end());
    h[i].resize(unique(h[i].begin(), h[i].end()) - h[i].begin());
  }
  for (int i = 1; i <= n; i++) {
    for (int j : g[i]) {
      assert(binary_search(g[j].begin(), g[j].end(), i));
    }
  }
  for (int i = 0; i < q; i++) {
    int s, d;
    scanf("%d %d", &s, &d);
    st[f(s)].insert(i);
    en[f(d)].insert(i);
  }
  for (int i = 1; i <= n; i++) vis[i] = 0;
  for (int i = 1; i <= n; i++)
    if (!vis[i]) {
      solve(i, i);
      if (!st[i].empty() or !en[i].empty()) {
        printf("No\n");
        exit(0);
      }
    }
  printf("Yes\n");
}
