#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void chkmin(T &a, T b) {
  if (a > b) a = b;
}
template <class T>
inline void chkmax(T &a, T b) {
  if (a < b) a = b;
}
int N, M, K;
long long dp[1 << 10][1 << 10];
int con[10][10];
int main() {
  int i, j, u, v, s1, s2, ss1, ss2;
  long long ans;
  scanf("%d%d%d", &N, &M, &K);
  for (i = 0; i < M; i++) {
    scanf("%d%d", &u, &v);
    u--, v--;
    con[u][v] = con[v][u] = 1;
  }
  for (i = 0; i < N; i++)
    for (j = 0; j < N; j++)
      if (i != j && con[i][j]) {
        s1 = s2 = (1 << i) + (1 << j);
        dp[s1][s2] = 1;
      }
  for (s1 = 0; s1 < (1 << N); s1++)
    for (s2 = 0; s2 <= s1; s2++)
      if (dp[s1][s2]) {
        for (i = 0; i < N; i++)
          if (!(s1 & (1 << i))) {
            for (j = 0; j < N; j++)
              if ((s1 & (1 << j)) && con[i][j]) {
                ss1 = s1 + (1 << i);
                if (s2 & (1 << j))
                  ss2 = s2 - (1 << j) + (1 << i);
                else
                  ss2 = s2 + (1 << i);
                if ((ss2 & -ss2) != (1 << i)) continue;
                dp[ss1][ss2] += dp[s1][s2];
              }
          }
      }
  ans = 0;
  for (s2 = 0; s2 < (1 << N); s2++) {
    if (__builtin_popcount(s2) == K) ans += dp[(1 << N) - 1][s2];
  }
  printf("%I64d\n", ans);
  return 0;
}
