#include <bits/stdc++.h>
using namespace std;
const int MAXM = 2e5 + 3, MAXN = 2e5 + 3, MAXQ = 2e5 + 3, MAXC = 2e5 + 3,
          ADD = 1 << 18;
int n, m, q;
int edge_from[MAXM << 1], edge_to[MAXM << 1], edge_nex[MAXM << 1];
int cntm = 1, head[MAXN];
void link(int from, int to) {
  edge_from[++cntm] = from;
  edge_to[cntm] = to;
  edge_nex[cntm] = head[from];
  head[from] = cntm;
}
bool isb[MAXM << 1];
int edge1_to[MAXC << 1], edge1_nex[MAXC << 1];
int cntm1 = 0, head1[MAXC];
void link1(int from, int to) {
  edge1_to[++cntm1] = to;
  edge1_nex[cntm1] = head1[from];
  head1[from] = cntm1;
}
int dfn[MAXN], low[MAXN], cntd = 0;
void tarjan(int now, int fa) {
  low[now] = dfn[now] = ++cntd;
  for (int i = head[now]; i; i = edge_nex[i]) {
    if ((i ^ 1) == fa) continue;
    if (!dfn[edge_to[i]]) {
      tarjan(edge_to[i], i);
      if (low[edge_to[i]] > low[now]) {
        isb[i] = isb[i ^ 1] = 1;
      } else {
        low[now] = low[edge_to[i]];
      }
    } else {
      low[now] = min(low[now], low[edge_to[i]]);
    }
  }
}
int col[MAXN], cntc = 0, Fa[MAXC][23], Deep[MAXC], cntd1 = 0;
void dfs(int now) {
  col[now] = cntc;
  for (int i = head[now]; i; i = edge_nex[i])
    if (!col[edge_to[i]] && !isb[i]) dfs(edge_to[i]);
}
void dfs2(int now) {
  for (int i = head1[now]; i; i = edge1_nex[i]) {
    if (!Deep[edge1_to[i]] && edge1_to[i] != Fa[now][0]) {
      Fa[edge1_to[i]][0] = now;
      Deep[edge1_to[i]] = Deep[now] + 1;
      dfs2(edge1_to[i]);
    }
  }
}
long long val1[MAXN];
long long sum1;
bool Arr[MAXN];
int ans = 1;
void dfs3(int now) {
  if (!ans) return;
  Arr[now] = 1;
  long long in1 = sum1;
  sum1 += val1[now];
  for (int i = head1[now]; i; i = edge1_nex[i])
    if (!Arr[edge1_to[i]] && ans) dfs3(edge1_to[i]);
  in1 = sum1 - in1;
  if ((in1 >> 18) && in1 - ((in1 >> 18) << 18)) ans = 0;
}
inline int lca(register int A, register int B) {
  if (Deep[A] < Deep[B]) swap(A, B);
  for (int i = 17; i >= 0; i--) {
    if (Deep[Fa[A][i]] >= Deep[B]) A = Fa[A][i];
  }
  if (A == B) return A;
  for (int i = 17; i >= 0; i--) {
    if (Fa[A][i] != Fa[B][i]) {
      A = Fa[A][i];
      B = Fa[B][i];
    }
  }
  if (Fa[A][0] == Fa[B][0] && Fa[A][0] != 0) return Fa[A][0];
  return -1;
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> m >> q;
  for (int i = 1, U, V; i <= m; i++) {
    cin >> U >> V;
    link(U, V);
    link(V, U);
  }
  for (int i = 1; i <= n; i++)
    if (!dfn[i]) tarjan(i, 0);
  for (int i = 1; i <= n; i++)
    if (!col[i]) {
      cntc++;
      dfs(i);
    }
  for (int i = 2; i <= cntm; i++)
    if (isb[i]) link1(col[edge_from[i]], col[edge_to[i]]);
  for (int i = 1; i <= cntc; i++)
    if (!Deep[i]) {
      Deep[i] = 1;
      dfs2(i);
    }
  for (int i = 1; i <= 17; i++)
    for (int j = 1; j <= cntc; j++) Fa[j][i] = Fa[Fa[j][i - 1]][i - 1];
  for (int i = 1, i2, i3, i4; i <= q; i++) {
    cin >> i2 >> i3;
    i2 = col[i2];
    i3 = col[i3];
    if (i2 == i3) continue;
    i4 = lca(i2, i3);
    if (i4 == -1) {
      ans = 0;
      break;
    }
    val1[i2] += 1;
    val1[i4] -= 1;
    val1[i3] += ADD;
    val1[i4] -= ADD;
  }
  for (int i = 1; i <= cntc; i++)
    if (!Arr[i]) dfs3(i);
  if (ans)
    cout << "Yes";
  else
    cout << "No";
}
