#include <bits/stdc++.h>
using namespace std;
int n, m, k;
bool g[10][10] = {};
int d[1027][1027];
int pc[1024];
int main() {
  for (int i = 0; i < (int)(1024); ++i) pc[i] = __builtin_popcount(i);
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 0; i < (int)(m); ++i) {
    int from, to;
    scanf("%d%d", &from, &to), --from, --to;
    g[from][to] = g[to][from] = true;
  }
  for (int mask1 = 0; mask1 < (int)(1 << n); ++mask1)
    for (int mask2 = 0; mask2 < (int)(1 << n); ++mask2)
      if ((mask1 & mask2) == mask2) {
        if (pc[mask1] == 2 && mask1 == mask2) {
          int u = -1, v;
          for (int i = 0; i < (int)(n); ++i)
            if (mask1 & (1 << i)) {
              if (u == -1)
                u = i;
              else
                v = i;
            }
          if (g[u][v]) {
            d[mask1][mask2] = 1;
          } else {
            d[mask1][mask2] = 0;
          }
          continue;
        }
        for (int i = 0; i < (int)(n); ++i)
          if (mask2 & (1 << i)) {
            for (int j = 0; j < (int)(n); ++j)
              if (g[i][j] && !(mask2 & (1 << j)) && (mask1 & (1 << j))) {
                d[mask1][mask2] += d[mask1 ^ (1 << i)][mask2 ^ (1 << i)];
                d[mask1][mask2] +=
                    d[mask1 ^ (1 << i)][mask2 ^ (1 << i) ^ (1 << j)];
              }
            break;
          }
      }
  int ans = 0;
  for (int mask = 0; mask < (int)(1 << n); ++mask)
    if (pc[mask] == k) {
      ans += d[(1 << n) - 1][mask];
    }
  printf("%d\n", ans);
  return 0;
}
