#include <bits/stdc++.h>
using namespace std;
const int maxs = (1 << 11) + 10;
vector<int> mp[20];
int dp[maxs][maxs], cnt1[maxs];
int n, m, k;
void init() {
  for (int i = 1; i <= maxs; i++)
    for (int k = 0; k < +15; k++)
      if (i & (1 << k)) cnt1[i]++;
}
int main() {
  init();
  cin >> n >> m >> k;
  int x, y;
  for (int i = 1; i <= m; i++) {
    cin >> x >> y;
    x--;
    y--;
    mp[x].push_back(y);
    mp[y].push_back(x);
  }
  for (int i = 1; i <= (1 << n) - 1; i <<= 1) dp[i][i] = 1;
  for (int i = 1; i <= (1 << n) - 1; i++)
    for (int j = i; j; --j &= i)
      if (dp[i][j])
        for (int e = 0; e < n; e++)
          if (i & (1 << e))
            for (int r = 0; r < mp[e].size(); r++) {
              int to = mp[e][r], now;
              if (~i & (1 << to)) {
                if (cnt1[i] == 1)
                  now = i | (1 << to);
                else
                  now = j & ~(1 << e) | (1 << to);
                if (!(now >> to + 1)) dp[i | (1 << to)][now] += dp[i][j];
              }
            }
  long long ans = 0;
  for (int i = 0; i <= (1 << n) - 1; i++)
    if (cnt1[i] == k) ans += dp[(1 << n) - 1][i];
  cout << ans;
  return 0;
}
