#include <cmath>
#include <cstring>
#include <iostream>
#include <algorithm>

#define ctz(x) __builtin_ctz(x)

using f64 = double;

const int N = 13, M = 1 << 6 | 3, NC = 600;

int n, m, c;
int a[N], p[N], q[N];
f64 ans, res;
f64 f[M][NC][NC], g[M][NC][NC];

int main() {
//	freopen("code.in", "r", stdin);
//	freopen("code.out", "w", stdout);

	scanf("%d%d", &n, &c), m = (1 << n) - 1;
	for (int i = 0; i < n; ++i)
		scanf("%d", a + i), p[i] = i + 1;
	std::sort(a, a + n, [](int a, int b){ return a > b; });
	do {
		for (int i = 0; i < n; ++i) q[p[i]] = i;
		memset(f, 0, sizeof f);
		f[0][0][1] = 1;
		for (int i = 1; i <= n * c; ++i)
			for (int j = i; j <= n * c + 1; ++j)
				for (int k = 0; k <= m; ++k) {
					f[k][i][j] += f[k][i - 1][j];
					int l = q[(i - 1) % n + 1];
					if (k >> l & 1) continue;
					f[k | 1 << l][i][std::min(std::max(j, i + a[l] * n), n * c + 1)] += f[k][i - 1][j];
				}
		ans += f[m][n * c][n * c + 1], ++res;
	} while (std::next_permutation(p + 1, p + n));
	printf("%.12lf", ans / res / pow(c, n - 1));

	return 0;
}
