#include <bits/stdc++.h>
using namespace std;
int N, M, Q, up;
long long ans;
class lcarec {
 public:
  int x, y, z;
} P[110];
class linerec {
 public:
  int x, y;
} L[110];
set<int> H[10010];
long long f[14][1 << 13];
int lowbit(int x) { return x & -x; }
long long work(int x, int s) {
  if (f[x][s] >= 0) return f[x][s];
  if (s == 0) return f[x][s] = 1;
  f[x][s] = 0;
  int b[20];
  memset(b, 0, sizeof(b));
  b[x] = 3;
  for (set<int>::iterator cp = H[s].begin(); cp != H[s].end(); cp++) {
    int t = *cp;
    for (int i = 1; i <= N; i++)
      if (t & (1 << (i - 2)))
        b[i] = 1;
      else if ((s & (1 << (i - 2))) && (i != x))
        b[i] = 2;
    bool flag = 1;
    int head = 0, ss = 0;
    for (int i = 1; i <= M; i++) {
      if (L[i].x == x && b[L[i].y] == 1) {
        ss++;
        head = L[i].y;
      }
      if (b[L[i].x] == 1 && b[L[i].y] == 2) flag = 0;
    }
    if (ss > 1) continue;
    if (!flag) continue;
    for (int i = 1; i <= Q; i++)
      if (b[P[i].x] >= 1 && b[P[i].x] <= 3 && b[P[i].y] >= 1 &&
          b[P[i].y] <= 3) {
        if (b[P[i].x] == 1 && b[P[i].y] == 1 && P[i].z == x) flag = 0;
        if (b[P[i].x] == 3 && b[P[i].y] == 3 && P[i].z != x) flag = 0;
        if (b[P[i].x] != b[P[i].y] && P[i].z != x) flag = 0;
      }
    if (!flag) continue;
    if (head)
      f[x][s] += work(head, t ^ (1 << (head - 2))) * work(x, s ^ t);
    else
      for (int i = 1; i <= N; i++)
        if (b[i] == 1) f[x][s] += work(i, t ^ (1 << (i - 2))) * work(x, s ^ t);
  }
  return f[x][s];
}
int main() {
  scanf("%d%d%d", &N, &M, &Q);
  for (int i = 1; i <= M; i++)
    scanf("%d%d", &L[i].x, &L[i].y), L[M + i].y = L[i].x, L[M + i].x = L[i].y;
  M <<= 1;
  for (int i = 1; i <= Q; i++) {
    scanf("%d%d%d", &P[i].x, &P[i].y, &P[i].z);
    if (P[i].x == P[i].y && P[i].x != P[i].z) {
      printf("0\n");
      return 0;
    }
  }
  up = 1;
  for (int i = 1; i < N; i++) up = up * 3;
  int a[20];
  for (int i = 1; i <= up; i++) {
    int x = i, y = 0;
    for (int j = 1; j < N; j++) a[j] = x % 3, x = x / 3;
    for (int j = 1; j < N; j++) {
      x <<= 1;
      if (a[j]) x ^= 1;
      y <<= 1;
      if (a[j] == 2) y ^= 1;
    }
    if (lowbit(x) == lowbit(y)) H[x].insert(y);
  }
  memset(f, 255, sizeof(f));
  ans = work(1, ((1 << (N - 1)) - 1));
  printf("%I64d\n", ans);
}
