#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <cctype>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <iomanip>

using namespace std;

typedef long long LL;

#define REP(i, n) for (int i(0); i < (int) (n); i++)

const int N = 100 + 10;

int n, t, l, b;
int tp[N];
long double p[N][N];

void solve() {
	for(int i = 0; i <= n; ++ i) {
		tp[i] = 0;
	}
	for(int i = 0; i < l; ++ i) {
		int x;
		scanf("%d", &x);
		tp[x] = 1;
	}
	for(int i = 0; i < b; ++ i) {
		int x;
		scanf("%d", &x);
		tp[x] = 2;
	}

	memset(p, 0, sizeof p);
	p[0][0] = 1;
	long double ret = 0;

	for(int i = 0; i < t; ++ i) {
		for(int j = 0; j < n; ++ j) {
			for(int k = 1; k <= 6; ++ k) {
				int nj = j + k;
				if (nj > n) {
					nj = 2 * n - nj;
				}
				if (tp[nj] == 0) {
					p[i + 1][nj] += p[i][j] / 6;
				}
				if (tp[nj] == 1) {
					p[i + 2][nj] += p[i][j] / 6;
				}
				if (tp[nj] == 2) {
					p[i + 1][0] += p[i][j] / 6;
				}
			}
		}
		ret += p[i + 1][n];
	}
	printf("%.12f\n", (double)ret);
}

int main() {
	for( ; scanf("%d%d%d%d", &n, &t, &l, &b); ) {
		if (n == 0 && t == 0 && l == 0 && b == 0) {
			break;
		}
		solve();
	}
	return 0;
}