#include <bits/stdc++.h>
using namespace std;
const int N = 11;
const int B = 1 << 10;
long long dp[B][B][N];
bool can[N][N];
vector<int> v[N + 1];
int countBits(int n) {
  int res = 0;
  while (n) {
    res += n % 2;
    n >>= 1;
  }
  return res;
}
bool bit(int n, int pos) { return n & (1 << pos); }
int rev(int n, int pos) { return n ^ (1 << pos); }
int main() {
  int n, m, k, b, ans = 0;
  cin >> n >> m >> k;
  for (int i = 0; i < m; i++) {
    int v, u;
    cin >> v >> u;
    v--, u--;
    can[v][u] = can[u][v] = 1;
  }
  b = 1 << n;
  for (int i = 0; i < b; i++) v[countBits(i)].push_back(i);
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++)
      if (can[i][j]) {
        int add = 0;
        add |= 1 << i;
        add |= 1 << j;
        dp[add][add][2] = 2;
      }
  for (int i = 2; i < n; i++)
    for (int j = 0; j < v[i].size(); j++) {
      int mask = v[i][j];
      for (int l = 0; l < b; l++) {
        int now = dp[mask][l][i];
        if (now == 0) continue;
        now /= countBits(l);
        vector<int> from, to;
        for (int x = 0; x < n; x++)
          if (bit(mask, x))
            from.push_back(x);
          else
            to.push_back(x);
        for (int f = 0; f < from.size(); f++)
          for (int t = 0; t < to.size(); t++) {
            int v = from[f], u = to[t];
            if (!can[v][u]) continue;
            if (bit(l, v))
              dp[mask ^ (1 << u)][rev(rev(l, v), u)][i + 1] += now;
            else
              dp[mask ^ (1 << u)][rev(l, u)][i + 1] += now;
          }
      }
    }
  for (int i = 0; i < v[k].size(); i++) ans += dp[b - 1][v[k][i]][n] / k;
  cout << ans;
  return 0;
}
