← Home
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	in := bufio.NewReader(os.Stdin)
	var n int
	if _, err := fmt.Fscan(in, &n); err != nil {
		return
	}
	a := make([]int, n)
	for i := 0; i < n; i++ {
		fmt.Fscan(in, &a[i])
	}
	var p int
	fmt.Fscan(in, &p)

	dp := make([][]int64, n+1)
	for i := 0; i <= n; i++ {
		dp[i] = make([]int64, p+1)
	}
	dp[0][0] = 1

	for _, x := range a {
		for k := n; k >= 1; k-- {
			for s := p; s >= x; s-- {
				dp[k][s] += dp[k-1][s-x]
			}
		}
	}

	comb := make([][]int64, n+1)
	for i := 0; i <= n; i++ {
		comb[i] = make([]int64, n+1)
		comb[i][0] = 1
		comb[i][i] = 1
		for j := 1; j < i; j++ {
			comb[i][j] = comb[i-1][j-1] + comb[i-1][j]
		}
	}

	var expected float64
	for t := 1; t <= n; t++ {
		var cnt int64
		for s := 0; s <= p; s++ {
			cnt += dp[t][s]
		}
		if comb[n][t] > 0 {
			expected += float64(cnt) / float64(comb[n][t])
		}
	}

	fmt.Printf("%.10f\n", expected)
}