#include <bits/stdc++.h>
using namespace std;
int N, M, K, t, t1, t2, x, y, pt, ans;
int ne[2000], st[2000], go[2000];
int f[2000][2000];
int tt[2000];
int main() {
  scanf("%d%d%d", &N, &M, &K);
  for (int i = 1; i <= M; i++) {
    scanf("%d%d", &x, &y);
    ne[++pt] = st[x];
    st[x] = pt;
    go[pt] = y;
    ne[++pt] = st[y];
    st[y] = pt;
    go[pt] = x;
  }
  memset(f, 0, sizeof(f));
  for (int j = 0; j < (1 << N); j++) {
    tt[j] = 0;
    for (int k = 0; k < N; k++)
      if (j & (1 << k)) tt[j]++;
    if (tt[j] == K) f[(1 << N) - 1][j] = 1;
  }
  for (int i = (1 << N) - 1; i >= 0; i--)
    for (int j = 0; j < (1 << N); j++)
      if (f[i][j]) {
        t = 0;
        for (int k = 0; k < N; k++)
          if (j & (1 << k)) {
            t = k + 1;
            break;
          }
        if (t == 0) continue;
        for (int k = st[t]; k; k = ne[k])
          if (i & (1 << (go[k] - 1)))
            if (!(j & (1 << (go[k] - 1)))) {
              x = i - (1 << (t - 1));
              y = j - (1 << (t - 1)) + (1 << (go[k] - 1));
              f[x][y] += f[i][j];
              x = i - (1 << (t - 1));
              y = j - (1 << (t - 1));
              f[x][y] += f[i][j];
            }
      }
  for (int i = 0; i < (1 << N); i++)
    if (tt[i] == 2) {
      for (int j = 0; j < N; j++)
        if (i & (1 << j)) {
          t2 = t1;
          t1 = j;
        }
      for (int j = st[t1 + 1]; j; j = ne[j])
        if (t2 + 1 == go[j]) {
          ans += f[i][i];
          break;
        }
    }
  printf("%d", ans);
}
