#include <cstdio>

const double kProbability = 1.0f / 6.0f;
const int kMaxSquare = 128;
const int kMaxTurn = 128;

enum BoardState{
	BLANK, LOSE, BACK
};

BoardState board[kMaxSquare];

double bp(const int N, const int T){
	double prob[kMaxTurn][kMaxSquare];
	for (int i = 0; i <= T; i++)
		for (int j = 0; j <= N; j++)
			prob[i][j] = 0.0f;
	prob[0][0] = 1.0f;

	for (int t = 0; t < T; t++){
		for (int n = 0; n < N; n++){
			if (prob[t][n] == 0.0f) continue;
			for (int dice = 1; dice <= 6; dice++){
				int pos = (n + dice <= N) ? n + dice : N - (n + dice - N);
				switch (board[pos]){
				case BLANK:
					prob[t + 1][pos] += prob[t][n] * kProbability;
					break;
				case LOSE:
					prob[t + 2][pos] += prob[t][n] * kProbability;
					break;
				case BACK:
					prob[t + 1][0] += prob[t][n] * kProbability;
				}
			}
		}
	}

	double res = 0.0f;
	for (int i = 1; i <= T; i++)
		res += prob[i][N];
	return res;
}

int main(){
	while (1){
		int N, T, L, B;
		scanf("%d %d %d %d", &N, &T, &L, &B);
		if (N == 0) return 0;
		for (int i = 0; i <= N; i++) 
			board[i] = BLANK;
		for (; L > 0; L--){
			int l;
			scanf("%d", &l);
			board[l] = LOSE;
		}
		for (; B > 0; B--){
			int b;
			scanf("%d", &b);
			board[b] = BACK;
		}
		printf("%.6f\n", bp(N, T));
	}
}