#include <iostream>
#include <cstdio>
#include <cstring>
#include <iomanip>
#include <algorithm>
#include <cstdlib>
#include <ctime>

using namespace std;

int n, c, a[6];
long long f[1 << 5][1 << 5][305];
int main() {
	scanf("%d %d", &n, &c);
	for (int i = 0; i < n; i++) cin >> a[i], a[i] *= n;
	c *= n;
	sort(a, a + n);
	f[0][0][a[n - 1]] = 1;
 // cout << a[n - 1] << endl;
	for (int x = 1; x < c; x++) if (x % n) {//x表示当前准备放的位置共用cn种可能
		for (int l = x + 1; l <= c; l++) {//l表示最右边覆盖到的位置
			for (int i = 0; i < 1 << n - 1; i++) if (!(i >> (x % n - 1) & 1)) { //找一个位置的小数部分状态为i，且和x对应的小数位置没有放
				for (int j = 0; j < 1 << n - 1; j++) if (f[i][j][l]){//找一个线段使用情况为j
					for (int y = 0; y < n - 1; y++) if (!(j >> y & 1)) {//选用第y条线段
            //cout << (i | 1 << (x % n - 1)) << " --- " << (j | 1 << y) << min(c, max(l, x + a[y])) << endl;
						f[i | 1 << (x % n - 1)][j | 1 << y][min(c, max(l, x + a[y]))] += f[i][j][l]; //更新结果
					}
				}
			}
		}
	}
	long long ans = f[(1 << n - 1) - 1][(1 << n - 1) - 1][c];
	long long all = 1;
	for (int i = 1; i < n; i++) {
		all = all * i * c / n;
	}
//	cout << ans << " " << all << endl;
	printf("%.13Lf\n",(long double) ans / all);


}