#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for (int i = (a); i <= (b); ++ i)
#define rrp(i,a,b) for (int i = (a); i >= (b); -- i)
#define gc() getchar()
#define fir first
#define sec second
typedef pair<int,int> pii;
typedef long double db;
typedef long long ll;
template <typename tp>
inline void read(tp& x) {
  x = 0; char tmp; bool key = 0;
  for (tmp = gc(); !isdigit(tmp); tmp = gc())
    key = (tmp == '-');
  for (; isdigit(tmp); tmp = gc())
    x = (x << 3) + (x << 1) + (tmp ^ '0');
  if (key) x = -x;
}
template <typename tp>
inline void ckmn(tp& x,tp y) {
  x = x < y ? x : y;
}
template <typename tp>
inline void ckmx(tp& x,tp y) {
  x = x < y ? y : x;
}

const int N = 6, M = 55;
db dp[N * M][1 << (N-1)][N * M];
db ans;
db mn = 1;
int n, c, len[N], per[N];
db solve() {
  memset(dp, 0, sizeof dp);
  dp[0][0][len[0] * n] = 1;
  rep (i, 0, c * n) {
    rep (s, 0, (1 << (n-1))-1) {
      rep (j, i, c * n) {
	if (i < c * n) dp[i+1][s][j] += dp[i][s][j];
	int k = i % n;
	if (k > 0 && ((s >> (k-1))&1) == 0)
	  dp[i+1][s | (1 << k >> 1)][min(c * n, max(j, i + len[per[k]] * n))] += dp[i][s][j] / (c + 0.0);
	if (dp[i][s][j] > 0) ckmn(mn, dp[i][s][j]);
      }
    }
  }
  return dp[c * n][(1 << (n-1)) - 1][c * n];
}
int main() {
  read(n), read(c);
  rep (i, 0, n-1) read(len[i]);
  sort(len, len + n, greater<int>());
  rep (i, 1, n-1) per[i] = i;
  do {
    db tmp = solve();
    rep (i, 1, n-1) tmp /= (i + 0.0);
    ans += tmp;
  } while (next_permutation(per+1, per+n));
  printf("%.12Lf\n", ans);
  return 0;
}
