#include <iostream>
#include <vector>
#include <string>
#include <cstring>
#include <algorithm>
#include <sstream>
#include <map>
#include <set>

#define REP(i,k,n) for(int i=k;i<n;i++)
#define rep(i,n) for(int i=0;i<n;i++)
#define INF 1<<30
#define pb push_back
#define mp make_pair

using namespace std;
typedef long long ll;
typedef pair<int,int> P;

double dp[105][105];

int main() {
	int n, t, l, b;
	while(cin >> n >> t >> l >> b) {
		if(n == 0 && t == 0 && l == 0 && b == 0) break;

		memset(dp, 0, sizeof(dp));

		bool lose[105], back[1005];
		memset(lose, 0, sizeof(lose));
		memset(back, 0, sizeof(back));

		rep(i, l) {
			int x;
			cin >> x;
			lose[x] = true;
		}

		rep(i, b) {
			int x;
			cin >> x;
			back[x] = true;
		}

		memset(dp, 0, sizeof(dp));

		dp[0][0] = 1.0;
		rep(i, t) {
			rep(j, n) {
				if(dp[i][j] == 0.0) continue;
				REP(k, 1, 7) {
					int p = j + k;
					if(p > n) p = n - (p - n);

					if(lose[p]) {
						dp[i+2][p] += dp[i][j] * (1.0 / 6.0);
					} else if(back[p]) {
						dp[i+1][0] += dp[i][j] * (1.0 / 6.0);
					} else {
						dp[i+1][p] += dp[i][j] * (1.0 / 6.0);
					}
				}
			}
		}

		double ans = 0;
		rep(i, t + 1) {
			ans += dp[i][n];
		}

		cout << fixed;
		cout.precision(20);
		cout << ans << endl;
	}

	return 0;
}