#include <bits/stdc++.h>
using namespace std;
const int N = 10, M = 200;
long long f[(1 << N) + 5][(1 << N) + 5];
pair<int, int> edges[M];
int n, m, k;
inline int bit(int x) { return 1 << x; }
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 1, a, b; i <= m; ++i) {
    scanf("%d%d", &a, &b);
    --a;
    --b;
    edges[i] = pair<int, int>(a, b);
    edges[i + m] = pair<int, int>(b, a);
    f[bit(a) | bit(b)][bit(a) | bit(b)] = 1;
  }
  m *= 2;
  for (int i = 0, ie = 1 << n; i < ie; ++i)
    for (int j = 0; j <= i; ++j)
      if (f[i][j] && ((i & j) == j))
        for (int k = 1, a, b; k <= m; ++k) {
          a = edges[k].first, b = edges[k].second;
          if ((i & bit(a)) && !(i & bit(b))) {
            int ni = i | bit(b), nj = (j | bit(b)) & ~bit(a);
            if (nj < bit(b + 1)) {
              f[ni][nj] += f[i][j];
            }
          }
        }
  long long res = 0;
  for (int i = 0, ie = 1 << n; i < ie; ++i)
    res += bool(__builtin_popcount(i) == k) * f[ie - 1][i];
  printf(
      "%lld"
      "\n",
      res);
  return 0;
}
