← Home
package main

import (
	"fmt"
)

func main() {
	var n, x int
	if _, err := fmt.Scan(&n, &x); err != nil {
		return
	}
	c := make([]int, n)
	maxSum := 0
	for i := 0; i < n; i++ {
		fmt.Scan(&c[i])
		maxSum += c[i]
	}

	dp := make([][]float64, n+1)
	for i := range dp {
		dp[i] = make([]float64, maxSum+1)
	}
	dp[0][0] = 1.0
	for i := 0; i < n; i++ {
		for k := n - 1; k >= 0; k-- {
			for s := maxSum; s >= c[i]; s-- {
				dp[k+1][s] += dp[k][s-c[i]]
			}
		}
	}

	dpJ := make([][][]float64, n)
	for j := 0; j < n; j++ {
		dpJ[j] = make([][]float64, n+1)
		for i := range dpJ[j] {
			dpJ[j][i] = make([]float64, maxSum+1)
		}
		dpJ[j][0][0] = 1.0
		for i := 0; i < n; i++ {
			if i == j {
				continue
			}
			for k := n - 1; k >= 0; k-- {
				for s := maxSum; s >= c[i]; s-- {
					dpJ[j][k+1][s] += dpJ[j][k][s-c[i]]
				}
			}
		}
	}

	Prob := make([][]float64, n+1)
	for i := range Prob {
		Prob[i] = make([]float64, maxSum+1)
	}
	Prob[n][maxSum] = 1.0

	ans := 0.0

	for k := n; k >= 1; k-- {
		for s := 0; s <= maxSum; s++ {
			if Prob[k][s] > 0 {
				if s*2 > x*(n+k) {
					ans += Prob[k][s] * float64(x) * float64(n+k) / float64(2*k)
					for j := 0; j < n; j++ {
						if s >= c[j] && dp[k][s] > 0 {
							Prob[k-1][s-c[j]] += Prob[k][s] / float64(k) * dpJ[j][k-1][s-c[j]] / dp[k][s]
						}
					}
				} else {
					ans += Prob[k][s] * float64(s)
				}
			}
		}
	}

	fmt.Printf("%.15f\n", ans)
}