#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 1000, OO = 1e9, M = 1e9 + 7, P = 6151, SQ = 1000, lg = 12;
int dp[(1 << lg)][(1 << lg)];
vector<int> v[N];
int32_t main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  int n, m, k;
  cin >> n >> m >> k;
  for (int i = 0; i < m; i++) {
    int x, y;
    cin >> x >> y;
    x--, y--;
    v[x].push_back(y);
    v[y].push_back(x);
    dp[(1 << x) + (1 << y)][(1 << x) + (1 << y)] = 1;
  }
  for (int msk = 1; msk < (1 << n); msk++) {
    if (__builtin_popcount(msk) <= 2) continue;
    for (int sub = 1; sub < (1 << n); sub++) {
      if ((sub & -sub) == sub || (msk & sub) != sub) continue;
      for (int i = 0; i < n; i++) {
        if (!(sub & (1 << i))) continue;
        int sb = sub ^ (1 << i), mk = msk ^ (1 << i);
        for (auto u : v[i]) {
          if (!(mk & (1 << u)) || (sub & (1 << u))) continue;
          dp[msk][sub] += (dp[mk][sb] + dp[mk][sb ^ (1 << u)]);
        }
      }
      int sz = __builtin_popcount(sub);
      dp[msk][sub] /= sz;
    }
  }
  int ans = 0, msk = (1 << n) - 1;
  for (int sub = 0; sub < (1 << n); sub++) {
    if (__builtin_popcount(sub) != k) continue;
    ans += dp[msk][sub];
  }
  cout << ans << endl;
  return 0;
}
