#include <bits/stdc++.h>
using namespace std;
const int maxn = 14;
int n, m, q, edge[maxn][2], lca[111][3], bit[maxn];
long long f[maxn][(1 << maxn) + maxn];
bool check(int now, int S1, int S2) {
  int t1, t2, t3;
  for (int i = 1; i <= m; i++) {
    if (edge[i][0] == now)
      t1 = 1;
    else if (bit[edge[i][0]] & S1)
      t1 = 2;
    else if (bit[edge[i][0]] & S2)
      t1 = 3;
    else
      t1 = 4;
    if (edge[i][1] == now)
      t2 = 1;
    else if (bit[edge[i][1]] & S1)
      t2 = 2;
    else if (bit[edge[i][1]] & S2)
      t2 = 3;
    else
      t2 = 4;
    if (t1 == t2 && t1 == 1)
      return 0;
    else if (t1 == t2 || t1 == 1 || t2 == 1)
      continue;
    else
      return 0;
  }
  for (int i = 1; i <= q; i++) {
    if (lca[i][0] == now)
      t1 = 1;
    else if (bit[lca[i][0]] & S1)
      t1 = 2;
    else if (bit[lca[i][0]] & S2)
      t1 = 3;
    else
      t1 = 4;
    if (lca[i][1] == now)
      t2 = 1;
    else if (bit[lca[i][1]] & S1)
      t2 = 2;
    else if (bit[lca[i][1]] & S2)
      t2 = 3;
    else
      t2 = 4;
    if (lca[i][2] == now)
      t3 = 1;
    else if (bit[lca[i][2]] & S1)
      t3 = 2;
    else if (bit[lca[i][2]] & S2)
      t3 = 3;
    else
      t3 = 4;
    if (t1 == 4 || t2 == 4) continue;
    if (t1 == t2 && t1 == 2) {
      if (t3 != 1 && t3 != 2)
        return 0;
      else
        continue;
    }
    if ((t1 == 1 || t2 == 1) && t3 == 1)
      continue;
    else if (t1 == 3 && t2 == 3 && t3 == 3)
      continue;
    else if (t1 == 2 && t2 == 3 && t3 == 1)
      continue;
    else if (t1 == 3 && t2 == 2 && t3 == 1)
      continue;
    else
      return 0;
  }
  return 1;
}
long long F(int now, int S) {
  long long ff = 0;
  if (f[now][S] != -1) return f[now][S];
  if (S == 0) {
    f[now][S] = check(now, 0, 0);
    return f[now][S];
  }
  for (int s = S; s != 0; s = (s - 1) & S) {
    if ((S & (-S)) != (s & (-s))) continue;
    if (!check(now, S - s, s)) continue;
    for (int i = 1; i <= n; i++) {
      if (!(bit[i] & s)) continue;
      if (!check(i, s - bit[i], 0)) continue;
      ff += F(i, s - bit[i]) * F(now, S - s);
    }
  }
  f[now][S] = ff;
  return f[now][S];
}
int main() {
  int u, v;
  scanf("%d %d %d", &n, &m, &q);
  for (int i = 1; i <= m; i++) {
    scanf("%d %d", &edge[i][0], &edge[i][1]);
    if (edge[i][0] == edge[i][1]) {
      printf("0\n");
      return 0;
    }
  }
  for (int i = 1; i <= n; i++) bit[i] = 1 << (i - 1);
  memset(f, -1, sizeof(f));
  for (int i = 1; i <= q; i++) {
    scanf("%d %d %d", &lca[i][0], &lca[i][1], &lca[i][2]);
    if (lca[i][0] == lca[i][1] && lca[i][0] != lca[i][2]) {
      printf("0\n");
      return 0;
    }
  }
  cout << F(1, (1 << n) - 1 - bit[1]) << endl;
  return 0;
}
