#include <bits/stdc++.h>
using namespace std;
bool f[11][11];
long long dp[1024][1024], n;
long long cnt(long long x) {
  long long re = 0;
  for (long long i = 0; i < n; i++) {
    if (x & (1 << i)) re++;
  }
  return re;
}
signed main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  long long m, k;
  cin >> n >> m >> k;
  for (long long i = 1; i <= m; i++) {
    long long x, y;
    cin >> x >> y;
    x--;
    y--;
    f[x][y] = 1;
    f[y][x] = 1;
    dp[(1 << y) | (1 << x)][(1 << y) | (1 << x)] = 1;
  }
  for (long long mask1 = 0; mask1 < 1 << n; mask1++) {
    for (long long mask2 = 0; mask2 < 1 << n; mask2++)
      if ((mask2 & mask1) == mask2 && dp[mask1][mask2]) {
        long long min1 = 1e9, min2 = 1e9;
        for (long long now = n - 1; now >= 0; now--)
          if (mask2 & (1 << now)) {
            min2 = min1, min1 = now;
          }
        for (long long now = 0; now < n; now++)
          if (!(mask1 & (1 << now))) {
            for (long long fr = 0; fr < n; fr++)
              if (mask1 & (1 << fr))
                if (f[now][fr]) {
                  if (mask2 & (1 << fr)) {
                    if (fr == min1 && now < min2 || now < min1) {
                      dp[mask1 | (1 << now)][mask2 ^ (1 << fr) ^ (1 << now)] +=
                          dp[mask1][mask2];
                    }
                  } else {
                    if (now < min1) {
                      dp[mask1 | (1 << now)][mask2 ^ (1 << now)] +=
                          dp[mask1][mask2];
                    }
                  }
                }
          }
      }
  }
  long long ans = 0;
  for (long long i = 0; i < 1 << n; i++) {
    if (cnt(i) == k) ans += dp[(1 << n) - 1][i];
  }
  cout << ans;
  return 0;
}
