#include <bits/stdc++.h>
using namespace std;
const long long maxn = 4e5 + 5;
long long n, m, q, cur = 1;
long long head[maxn], nex[maxn], to[maxn];
void add(long long u, long long v) {
  nex[++cur] = head[u];
  to[cur] = v;
  head[u] = cur;
  return;
}
long long dfn[maxn], low[maxn], dfsc;
long long st[maxn], top;
long long col[maxn], cols;
void Tarjan(long long now, long long nd) {
  dfn[now] = low[now] = ++dfsc;
  st[++top] = now;
  for (int i = head[now]; i; i = nex[i]) {
    long long t = to[i];
    if (i == nd || t == 0) continue;
    if (!dfn[t]) {
      Tarjan(t, i ^ 1);
      low[now] = min(low[now], low[t]);
      if (low[t] > dfn[now]) {
        cols++;
        while (st[top] != t) {
          col[st[top--]] = cols;
        }
        col[st[top--]] = cols;
      }
    } else {
      low[now] = min(low[now], dfn[t]);
    }
  }
  return;
}
long long ux[maxn], vx[maxn];
long long fa[maxn];
void init() {
  for (int i = 1; i <= n; i++) fa[i] = i;
  return;
}
long long find(long long x) { return fa[x] == x ? x : fa[x] = find(fa[x]); }
void merge(long long x, long long y) {
  fa[find(x)] = find(y);
  return;
}
void rebuild() {
  for (int i = 1; i <= n; i++) {
    if (!dfn[i]) {
      Tarjan(i, -1);
      cols++;
      while (top > 0) {
        col[st[top--]] = cols;
      }
    }
  }
  memset(head, 0, sizeof(head));
  memset(nex, 0, sizeof(nex));
  cur = 0;
  init();
  for (int i = 1; i <= m; i++) {
    if (col[ux[i]] != col[vx[i]]) {
      add(col[ux[i]], col[vx[i]]);
      add(col[vx[i]], col[ux[i]]);
      merge(col[ux[i]], col[vx[i]]);
    }
  }
  return;
}
long long sz[maxn], dep[maxn];
long long anc[maxn][21];
long long dfn2[maxn], cntt;
void dfs(long long now, long long fa) {
  dfn2[now] = ++cntt;
  sz[now] = 1;
  anc[now][0] = fa;
  for (int i = 1; (1 << i) <= dep[now]; i++) {
    anc[now][i] = anc[anc[now][i - 1]][i - 1];
  }
  for (int i = head[now]; i; i = nex[i]) {
    long long t = to[i];
    if (t == fa) continue;
    dep[t] = dep[now] + 1;
    dfs(t, now);
    sz[now] += sz[t];
  }
  return;
}
long long lca(long long u, long long v) {
  if (dep[u] < dep[v]) swap(u, v);
  long long cnt = dep[u] - dep[v];
  for (int i = 20; i >= 0; i--) {
    if ((cnt >> i) & 1) u = anc[u][i];
  }
  if (u == v) return u;
  for (int i = 20; i >= 0; i--) {
    if (anc[u][i] != anc[v][i]) {
      u = anc[u][i], v = anc[v][i];
    }
  }
  return anc[u][0];
}
long long bt1[maxn], bt2[maxn];
inline long long llow(long long x) { return x & (-x); }
void upd(long long* arr, long long pos, long long x) {
  for (int i = pos; i <= cols; i += llow(i)) {
    arr[i] += x;
  }
  return;
}
long long que(long long* arr, long long pos) {
  long long res = 0;
  for (int i = pos; i; i -= llow(i)) {
    res += arr[i];
  }
  return res;
}
int main() {
  scanf("%lld %lld %lld", &n, &m, &q);
  for (int i = 1; i <= m; i++) {
    scanf("%lld %lld", &ux[i], &vx[i]);
    add(ux[i], vx[i]);
    add(vx[i], ux[i]);
  }
  rebuild();
  for (int i = 1; i <= n; i++) {
    if (!dfn2[i]) dfs(i, 0);
  }
  for (int i = 1; i <= q; i++) {
    long long s, t;
    scanf("%lld %lld", &s, &t);
    s = col[s], t = col[t];
    if (s == t) continue;
    if (find(s) != find(t)) {
      puts("No");
      return 0;
    }
    long long lc = lca(s, t);
    long long sum1 = que(bt1, dfn2[t]) - que(bt1, dfn2[lc]);
    if (sum1 > 0) {
      puts("No");
      return 0;
    }
    sum1 = que(bt2, dfn2[s]) - que(bt2, dfn2[lc]);
    if (sum1 > 0) {
      puts("No");
      return 0;
    }
    if (s != lc) upd(bt1, dfn2[s], 1), upd(bt1, dfn2[s] + sz[s], -1);
    if (t != lc) upd(bt2, dfn2[t], 1), upd(bt2, dfn2[t] + sz[t], -1);
  }
  cout << "Yes" << endl;
  return 0;
}
