#include <iostream>#include <string>#include <cstdio>#include <string.h>#include <algorithm>#define MAXN 25using namespace std;int n, m, t, K;double dp[110][4][110][110];int tt[110];void input(){ int cases; cin >> cases; while (cases--) { cin >> t >> n >> m >> K; for (int i = 0; i <= n; i++) { for (int j = 0; j <= 3; j++) { for (int k = 0; k <= t; k++) { for (int l = 0; l <= m; l++) { dp[i][j][k][l] = 0.0; } } } } dp[0][0][0][m] = 1.0; tt[0] = 0; for (int i = 1; i <= n; i++) { cin >> tt[i]; int ti = tt[i] - tt[i - 1]; for (int j = 0; j <= m; j++) { dp[i][0][0][j] += dp[i - 1][0][0][j] * (K - 2) / K; dp[i][1][0][j] += dp[i - 1][0][0][j] * 1 / K; dp[i][2][0][j] += dp[i - 1][0][0][j] * 1 / K; } for (int j = 0; j <= m; j++) { dp[i][0][0][j] += dp[i - 1][1][0][j] * 1 / K; dp[i][1][0][j] += dp[i - 1][1][0][j] * (K - 2) / K; dp[i][3][0][j] += dp[i - 1][1][0][j] * 1 / K; } for (int k = 0; k <= t; k++) { for (int j = 0; j <= m; j++) { dp[i][3][(k + ti) >= t ? 0 : (k + ti)][max(0, j - (k + ti >= t))] += dp[i - 1][2][k][j] * 1 / K; dp[i][0][0][j] += dp[i - 1][2][k][j] * 1 / K; dp[i][2][min(t, k + ti)][j] += dp[i - 1][2][k][j] * (K - 2) / K; } } for(int k = 0; k <= t; k++) { for(int j = 0; j <= m; j++) { int a,b; a = (k + ti) % t, b = max(0, j - (k + ti) / t); dp[i][3][a][b] += dp[i - 1][3][k][j] * (K - 2) / K; dp[i][2][a][b] += dp[i - 1][3][k][j] * 1 / K; dp[i][1][0][b] += dp[i - 1][3][k][j] * 1 / K; } } } int temp = 1440 - tt[n]; double ans = 0; for (int i = 0; i <= t; i++) { for (int j = 0; j <= 2; j++) { for (int k = 0; k <= m; k++) { ans += dp[n][j][i][k] * k; } } } for (int i = 0; i <= t; i++) { for (int k = 0; k <= m; k++) { ans += dp[n][3][i][k] * (max(0, k - ((i + temp) / t))); } } printf("%.6lfn", ans); }}int main(){ input(); return 0;}


