#include <cstdio>
#include <vector>
#include <cstring>
#include <algorithm>

using namespace std;

typedef long long lli;
typedef pair<int, int> pii;

#define fi first
#define se second

const int maxn = 6;
const int maxc = 50;
const int maxs = 1 << maxn - 1;

int L[maxn];
lli f[252][maxn * maxc + 1];
vector<int> state[maxn];
int cnt[maxs], id[maxs][maxs], tot;
pii Map[252];

int main()
{
	int n, c;
	scanf("%d%d", &n, &c);
	int nc = n * c;
	for (int i = 0; i < n; ++ i) scanf("%d", L + i);
	sort(L, L + n);
	int all = (1 << n - 1) - 1;
	for (int i = 0; i <= all; ++ i)
	{
		cnt[i] = cnt[i >> 1] + (i & 1);
		state[cnt[i]].push_back(i);
	}
	for (int i = 0; i < n; ++ i)
	{
		vector<int> &cur = state[i];
		int size = cur.size();
		for (int j = 0; j < size; ++ j)
			for (int k = 0; k < size; ++ k)
			{
				Map[tot].fi = cur[j];
				Map[tot].se = cur[k];
				id[cur[j]][cur[k]] = tot ++;
			}
	}
	f[0][L[n - 1] * n] = 1;
	for (int i = 0; i < nc; ++ i)
	{
		int pos = i % n;
		if (!pos) continue;
		-- pos;
		for (int j = 0; j < tot; ++ j)
		{
			int cur0 = Map[j].fi, cur1 = Map[j].se;
			if (cur1 >> pos & 1) continue;
			int nxt1 = cur1 | (1 << pos);
			for (int r = i; r <= nc; ++ r)
			{
				int w = f[j][r];
				if (!w) continue;
				for (int k = 0; k < n - 1; ++ k)
				{
					if (cur0 >> k & 1) continue;
					int nxt0 = cur0 | (1 << k);
					f[id[nxt0][nxt1]][min(nc, max(r, i + L[k] * n))] += w;
				}
			}
		}
	}
	double ans = f[tot - 1][nc];
	for (int i = 0; i < n - 1; ++ i) ans /= c;
	for (int i = 1; i < n; ++ i) ans /= i;
	printf("%.19lf\n", ans);
	return 0;
}
