#include <bits/stdc++.h>
using namespace std;
struct str {
  int a, b, c;
} v1[15], v2[110];
int m, q;
long long d[1 << 13][13];
int bun(int mask, int rad, int mask1, int rad1) {
  for (int i = 1; i <= m; i++)
    if (mask & (1 << v1[i].a) && mask1 & (1 << v1[i].b) &&
        !(v1[i].a == rad && v1[i].b == rad1))
      return 0;
    else if (mask & (1 << v1[i].b) && mask1 & (1 << v1[i].a) &&
             !(v1[i].b == rad && v1[i].a == rad1))
      return 0;
  for (int i = 1; i <= q; i++)
    if (mask & (1 << v2[i].a) && mask1 & (1 << v2[i].b) && v2[i].c != rad)
      return 0;
    else if (mask & (1 << v2[i].b) && mask1 & (1 << v2[i].a) && v2[i].c != rad)
      return 0;
  return 1;
}
int main() {
  int n;
  scanf("%d%d%d", &n, &m, &q);
  for (int i = 1; i <= m; i++) {
    scanf("%d%d", &v1[i].a, &v1[i].b);
    v1[i].a--;
    v1[i].b--;
  }
  for (int i = 1; i <= q; i++) {
    scanf("%d%d%d", &v2[i].a, &v2[i].b, &v2[i].c);
    v2[i].a--;
    v2[i].b--;
    v2[i].c--;
    if (v2[i].a == v2[i].b && v2[i].c != v2[i].a) {
      printf("0");
      return 0;
    }
  }
  for (int i = 0; i < n; i++) d[1 << i][i] = 1;
  int lim = 1 << n;
  for (int mask = 1; mask < lim; mask++)
    for (int rad = 0; rad < n; rad++)
      if (mask & (1 << rad)) {
        int a = -1;
        for (int i = 0; i < n; i++)
          if (mask & (1 << i) && i != rad) a = i;
        if (a == -1) continue;
        for (int mask1 = (mask - 1) & mask; mask1; mask1 = (mask1 - 1) & mask)
          if (mask1 & (1 << a) && !(mask1 & (1 << rad))) {
            for (int rad1 = 0; rad1 < n; rad1++)
              if (mask1 & (1 << rad1) && bun(mask ^ mask1, rad, mask1, rad1))
                d[mask][rad] += d[mask1][rad1] * d[mask ^ mask1][rad];
          }
      }
  printf("%I64d", d[lim - 1][0]);
  return 0;
}
