int n, m, sum, a[10]; double dp[51][51][51][51], ans[10];
intmain(){ scanf("%d %d", &n, &m); for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); sum += a[i]; } m = min(m, sum); dp[a[1]][a[2]][a[3]][a[4]] = 1; for (int tme = 0; tme <= m; tme++) { for (int i = 0; i <= a[1]; i++) { for (int j = 0; j <= a[2]; j++) { for (int k = 0; k <= a[3]; k++) { int l = sum - tme - i - j - k; if (sum - i - j - k - l != tme) continue; if (l > a[4] || l < 0) continue; if (i == 0 && j == 0 && k == 0 && l == 0) continue; int num = 0; if (i) num++; if (j) num++; if (k) num++; if (l) num++; if (i) dp[i-1][j][k][l] += dp[i][j][k][l] / num; if (j) dp[i][j-1][k][l] += dp[i][j][k][l] / num; if (k) dp[i][j][k-1][l] += dp[i][j][k][l] / num; if (l) dp[i][j][k][l-1] += dp[i][j][k][l] / num; } } } } //统计答案写得恶臭无比 不要在意 for (int i = 0; i <= a[2]; i++) { for (int j = 0; j <= a[3]; j++) { for (int k = 0; k <= a[4]; k++) { if (sum - i - j - k == m) { ans[1] += dp[0][i][j][k]; } } } } for (int i = 0; i <= a[1]; i++) { for (int j = 0; j <= a[3]; j++) { for (int k = 0; k <= a[4]; k++) { if (sum - i - j - k == m) ans[2] += dp[i][0][j][k]; } } } for (int i = 0; i <= a[1]; i++) { for (int j = 0; j <= a[2]; j++) { for (int k = 0; k <= a[4]; k++) { if (sum - i - j - k == m) ans[3] += dp[i][j][0][k]; } } } for (int i = 0; i <= a[1]; i++) { for (int j = 0; j <= a[2]; j++) { for (int k = 0; k <= a[3]; k++) { if (sum - i - j - k == m) ans[4] += dp[i][j][k][0]; } } } for (int i = 1; i <= n; i++) { printf("%.6lf\n", 1 - ans[i]); } return0; }