#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 5;
int n, m, q;
vector<pair<int, int> > edge;
set<pair<int, int> > bridges;
set<pair<int, int> > duplicate;
vector<int> AdjList[maxn];
int in[maxn];
int low[maxn];
bool vis[maxn];
int cur = 0;
int cnt_comp = 0;
int component[maxn];
void find_bridges(int s, int p = -1) {
  vis[s] = true;
  low[s] = in[s] = ++cur;
  for (int u : AdjList[s]) {
    if (u == p) continue;
    if (vis[u])
      low[s] = min(in[u], low[s]);
    else {
      find_bridges(u, s);
      low[s] = min(low[s], low[u]);
      if (low[u] > in[s]) {
        int x = u;
        int y = s;
        if (x > y) swap(x, y);
        if (duplicate.find(pair<int, int>(x, y)) == duplicate.end())
          bridges.insert(pair<int, int>(x, y));
      }
    }
  }
}
int comp[maxn];
vector<int> graph[maxn];
void calc_comp(int s) {
  vis[s] = true;
  for (int u : graph[s]) {
    if (vis[u]) continue;
    comp[u] = comp[s];
    calc_comp(u);
  }
}
int direction[maxn];
vector<int> AdjComp[maxn];
int cur_chain;
int cur_pos;
int chain_id[maxn];
int chain_head[maxn];
int sz[maxn];
int pos[maxn];
int arr[maxn];
int depth[maxn];
int par[maxn];
int forest_comp[maxn];
void prep(int s, int p = -1) {
  sz[s] = 1;
  for (int u : AdjComp[s]) {
    if (u != p) {
      par[u] = s;
      depth[u] = depth[s] + 1;
      prep(u, s);
      sz[s] += sz[u];
    }
  }
}
void hld(int s, int p = -1) {
  vis[s] = 1;
  if (chain_head[cur_chain] == 0) {
    chain_head[cur_chain] = s;
  }
  chain_id[s] = cur_chain;
  pos[s] = cur_pos;
  arr[cur_pos] = s;
  cur_pos++;
  int nxt = 0;
  for (int u : AdjComp[s]) {
    if (u == p) continue;
    forest_comp[u] = forest_comp[s];
    if (nxt == 0 || sz[u] > sz[nxt]) nxt = u;
  }
  if (nxt != 0) hld(nxt, s);
  for (int u : AdjComp[s]) {
    if (u == p || u == nxt) continue;
    cur_chain++;
    hld(u, s);
  }
}
int lca(int u, int v) {
  while (chain_id[u] != chain_id[v]) {
    if (chain_id[u] > chain_id[v]) {
      u = par[chain_head[chain_id[u]]];
    } else
      v = par[chain_head[chain_id[v]]];
  }
  if (depth[u] < depth[v])
    return u;
  else
    return v;
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m >> q;
  for (int i = 1; i <= m; i++) {
    int u, v;
    cin >> u >> v;
    if (u > v) swap(u, v);
    edge.push_back(pair<int, int>(u, v));
    AdjList[u].push_back(v);
    AdjList[v].push_back(u);
  }
  sort(edge.begin(), edge.end());
  for (int i = 1; i < edge.size(); i++) {
    if (edge[i] == edge[i - 1]) {
      duplicate.insert(pair<int, int>(edge[i].first, edge[i].second));
    }
  }
  for (int i = 1; i <= n; i++) {
    if (!vis[i]) find_bridges(i);
  }
  for (int i = 1; i <= n; i++) vis[i] = false;
  for (pair<int, int> tmp : edge) {
    int u = tmp.first;
    int v = tmp.second;
    if (bridges.find(pair<int, int>(u, v)) != bridges.end()) {
      continue;
    }
    graph[u].push_back(v);
    graph[v].push_back(u);
  }
  for (int i = 1; i <= n; i++) {
    if (!vis[i]) {
      comp[i] = ++cnt_comp;
      calc_comp(i);
    }
  }
  for (pair<int, int> tmp : edge) {
    int u = tmp.first;
    int v = tmp.second;
    if (comp[u] == comp[v]) continue;
    AdjComp[comp[u]].push_back(comp[v]);
    AdjComp[comp[v]].push_back(comp[u]);
  }
  for (int i = 1; i <= cnt_comp; i++) {
    direction[i] = 0;
    vis[i] = false;
  }
  int cur_tree = 0;
  for (int i = 1; i <= cnt_comp; i++) {
    if (!vis[i]) {
      forest_comp[i] = ++cur_tree;
      prep(i);
      hld(i);
    }
  }
  for (int i = 1; i <= q; i++) {
    if (i > 15000) break;
    int st, ds;
    cin >> st >> ds;
    if (comp[st] == comp[ds]) continue;
    st = comp[st];
    ds = comp[ds];
    if (forest_comp[st] != forest_comp[ds]) {
      cout << "No";
      return 0;
    }
    int anc = lca(st, ds);
    while (true) {
      if (st == anc) break;
      if (direction[st] == 2) {
        cout << "No";
        return 0;
      }
      direction[st] = 1;
      st = par[st];
    }
    while (true) {
      if (ds == anc) break;
      if (direction[ds] == 1) {
        cout << "No";
        return 0;
      }
      direction[ds] = 2;
      ds = par[ds];
    }
  }
  cout << "Yes";
}
