#include <bits/stdc++.h>
using namespace std;
const int maxn = 1100, maxk = 10;
long long dp[maxn][maxn], n, m, k, u, v, x, ans;
vector<int> vec[maxk];
int main() {
  ios::sync_with_stdio(0);
  cin >> n >> m >> k;
  for (int i = 0; i < m; i++) {
    cin >> u >> v;
    u--;
    v--;
    vec[u].push_back(v);
    vec[v].push_back(u);
    dp[(1 << u) ^ (1 << v)][(1 << u) ^ (1 << v)] = 1;
  }
  for (int i = 0; i < n; i++) dp[1 << i][1 << i] = 1;
  for (int i = 3; i < (1 << n); i++) {
    if (__builtin_popcount(i) > 2) {
      for (int sub = i; sub; sub = (sub - 1) & i) {
        x = sub;
        for (int j = 0; j < n; j++) {
          if (x & 1) {
            for (int p = 0; p < ((int(vec[j].size()))); p++) {
              if (((1 << vec[j][p]) & i) && !((1 << vec[j][p]) & sub))
                dp[i][sub] +=
                    dp[i ^ (1 << j)][sub ^ (1 << j)] +
                    dp[i ^ (1 << j)][sub ^ (1 << j) ^ (1 << vec[j][p])];
            }
            break;
          }
          x >>= 1;
        }
        if (i == (1 << n) - 1 && __builtin_popcount(sub) == k)
          ans += dp[i][sub];
      }
    }
  }
  cout << ans;
  return 0;
}
