#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
const long long N = 10;
long long n, m, k, dp[1 << N][1 << N];
bool adj[N][N];
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long i, j, v, u, mask, sub, ans = 0;
  cin >> n >> m >> k;
  for (i = 0; i < m; i++) {
    cin >> v >> u;
    v--, u--;
    adj[v][u] = adj[u][v] = 1;
  }
  dp[0][0] = 1;
  for (i = 0; i < n; i++) dp[1 << i][1 << i] = 1;
  for (u = 0; u < n; u++)
    for (v = 0; v < n; v++)
      if (adj[u][v]) dp[(1 << u) | (1 << v)][(1 << u) | (1 << v)] = 1;
  for (mask = 0; mask < (1 << n); mask++) {
    if (__builtin_popcountll(mask) < 3) continue;
    for (sub = (mask - 1) & mask; sub; sub = (sub - 1) & mask) {
      long long v = __builtin_ctzll(sub);
      for (u = 0; u < n; u++) {
        if (adj[v][u] && (mask >> u & 1) && !(sub >> u & 1))
          dp[mask][sub] += dp[mask ^ (1 << v)][sub ^ (1 << v)] +
                           dp[mask ^ (1 << v)][sub ^ (1 << v) ^ (1 << u)];
      }
    }
  }
  for (mask = 0; mask < (1 << n); mask++)
    if (__builtin_popcountll(mask) == k) ans += dp[(1 << n) - 1][mask];
  cout << ans << endl;
  cerr << "\nTime elapsed: " << 1000 * clock() / CLOCKS_PER_SEC << "ms\n";
  return 0;
}
