#include <bits/stdc++.h>
using namespace std;
const int N = 13, Q = 110;
int n, m, q;
struct E {
  int x, y;
} e[N];
struct L {
  int x, y, z;
} l[Q];
bool t1[N], t2[N];
long long f[1 << N][N];
inline bool check(int r1, int r2) {
  for (int i = 0; i < m; i++) {
    int x = e[i].x, y = e[i].y;
    if (!t1[x] && !t2[x] && x != r1) continue;
    if (!t1[y] && !t2[y] && y != r1) continue;
    if (x == r1) {
      if (t2[y] && y != r2) return false;
    } else if (y == r1) {
      if (t2[x] && x != r2) return false;
    } else {
      if ((t1[x] && t2[y]) || (t1[y] && t2[x])) return false;
    }
  }
  for (int i = 0; i < q; i++) {
    int x = l[i].x, y = l[i].y, z = l[i].z;
    if (!t1[x] && !t2[x] && x != r1) continue;
    if (!t1[y] && !t2[y] && y != r1) continue;
    if (!t1[z] && !t2[z] && z != r1) continue;
    if (x == r1 || y == r1) {
      if (z != r1) return false;
    } else if ((t1[x] && t2[y]) || (t1[y] && t2[x])) {
      if (z != r1) return false;
    } else if (t1[x] && t1[y]) {
      if (t2[z]) return false;
    } else if (t2[x] && t2[y]) {
      if (t1[z] || z == r1) return false;
    }
  }
  return true;
}
int main() {
  scanf("%d%d%d", &n, &m, &q);
  for (int i = 0; i < m; i++) {
    scanf("%d%d", &e[i].x, &e[i].y);
    e[i].x--;
    e[i].y--;
  }
  for (int i = 0; i < q; i++) {
    scanf("%d%d%d", &l[i].x, &l[i].y, &l[i].z);
    l[i].x--;
    l[i].y--;
    l[i].z--;
  }
  for (int i = 0; i < n; i++) f[1 << i][i] = 1;
  for (int s = 1; s < (1 << n); s++) {
    memset(t1, 0, sizeof(t1));
    for (int i = 0; i < n; i++)
      if ((s >> i) & 1) t1[i] = true;
    for (int i = 0; i < n; i++)
      if ((s >> i) & 1) {
        t1[i] = false;
        int s1 = s - (1 << i);
        for (int s2 = s1; s2 > s1 - s2; s2 = (s2 - 1) & s1) {
          for (int j = 0; j < n; j++)
            if ((s2 >> j) & 1) {
              t2[j] = true;
              t1[j] = false;
            }
          for (int j = 0; j < n; j++)
            if ((s2 >> j) & 1) {
              if (!check(i, j)) continue;
              f[s][i] += f[s - s2][i] * f[s2][j];
            }
          for (int j = 0; j < n; j++)
            if ((s2 >> j) & 1) {
              t2[j] = false;
              t1[j] = true;
            }
        }
        t1[i] = true;
      }
  }
  cout << f[(1 << n) - 1][0] << endl;
  return 0;
}
