#include <bits/stdc++.h>
using namespace std;
bool check_lca(int r, int m1, int m2, const vector<vector<int>> &lca) {
  for (const auto &l : lca) {
    int x = l[0], y = l[1], z = l[2];
    if (((m1 >> x) & 1) && ((m2 >> y) & 1) && r != z)
      return false;
    else if (((m1 >> x) & 1) && ((m1 >> y) & 1) && ((m2 >> z) & 1))
      return false;
    else if (((m2 >> x) & 1) && ((m2 >> y) & 1) && ((m1 >> z) & 1))
      return false;
  }
  return true;
}
bool check_edges(int r1, int r2, int m1, int m2,
                 const vector<vector<int>> &edges) {
  for (const auto &e : edges) {
    int x = e[0], y = e[1];
    if (((m1 >> x) & 1) && ((m2 >> y) & 1))
      return false;
    else if (r1 == x && ((m2 >> y) & 1))
      return false;
    else if (((m1 >> x) & 1) && r2 == y)
      return false;
  }
  return true;
}
int main() {
  int n, m, q;
  cin >> n >> m >> q;
  vector<vector<int>> edges(2 * m, vector<int>(2));
  for (int i = 0; i < m; i++) {
    cin >> edges[i][0] >> edges[i][1];
    edges[i][0]--;
    edges[i][1]--;
    edges[i + m][0] = edges[i][1];
    edges[i + m][1] = edges[i][0];
  }
  vector<vector<int>> lca(2 * q, vector<int>(3));
  for (int i = 0; i < q; i++) {
    cin >> lca[i][0] >> lca[i][1] >> lca[i][2];
    lca[i][0]--;
    lca[i][1]--;
    lca[i][2]--;
    lca[i + q][0] = lca[i][1];
    lca[i + q][1] = lca[i][0];
    lca[i + q][2] = lca[i][2];
  }
  vector<vector<long long>> f(1 << n, vector<long long>(n, 0));
  for (int i = 0; i < n; i++) f[1 << i][i] = 1;
  for (int mask = 1; mask < (1 << n); mask++)
    for (int r = 0; r < n; r++)
      if ((mask >> r) & 1) {
        int mask_wt_r = mask ^ (1 << r);
        for (int sub = mask_wt_r; sub > (mask_wt_r ^ sub);
             sub = (sub - 1) & mask_wt_r)
          if (check_lca(r, mask ^ sub, sub, lca))
            for (int sr = 0; sr < n; sr++)
              if ((sub >> sr) & 1)
                if (check_edges(r, sr, mask_wt_r ^ sub, sub ^ (1 << sr), edges))
                  f[mask][r] += f[mask ^ sub][r] * f[sub][sr];
      }
  cout << f[(1 << n) - 1][0] << endl;
  return 0;
}
