#include <bits/stdc++.h>
using namespace std;
const int SIZE = 1029, MAXN = 13;
int n, m, k;
bool g[MAXN][MAXN];
int ans = 0;
int dp[SIZE][SIZE];
int sz(int x) {
  int res = 0;
  while (x) {
    x -= x & (-x);
    res++;
  }
  return res;
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 1; i <= m; i++) {
    int p, q;
    scanf("%d%d", &p, &q);
    g[p][q] = g[q][p] = true;
  }
  for (int i = 1; i <= (1 << n) - 1; i++)
    for (int j = 1; j <= i; j++)
      if ((i | j) == i) {
        if (sz(i) == 2 && i == j) {
          for (int x = 1; x <= n; x++)
            if ((1 << (x - 1)) & i)
              for (int y = 1; y <= n; y++)
                if ((1 << (y - 1)) & i)
                  if (g[x][y]) dp[i][j] = 1;
        }
        if (sz(i) >= 3) {
          for (int c = 1; c <= n; c++)
            if ((1 << (c - 1)) & j) {
              for (int x = 1; x <= n; x++)
                if (g[c][x] && ((1 << (x - 1)) & (i ^ j)) && x != c)
                  dp[i][j] += dp[i ^ (1 << (c - 1))][j ^ (1 << (c - 1))] +
                              dp[i ^ (1 << (c - 1))]
                                [(j ^ (1 << (c - 1))) | (1 << (x - 1))];
              break;
            }
        }
      }
  for (int i = 1; i <= (1 << n) - 1; i++)
    if (sz(i) == k) ans += dp[(1 << n) - 1][i];
  printf("%d\n", ans);
  return 0;
}
