#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <map>
#include <set>
#include <fstream>
#include <cmath>

using namespace std;

//#define DEB
#ifdef DEB
ifstream ifs("input.txt");
ofstream ofs("output.txt");
#define cin ifs
#define cout ofs
#endif

#define EPS (1e-9)
#define EQ(a,b) (abs((a)-(b))<EPS)

//  é^[É é}XÚÉ¢ém¦
double dp[2][101][101];
char field[1001];
int n,t,l,b;

double dfs(int yasu,int tern,int pl){
	if(!EQ(dp[yasu][tern][pl],-1))
		return dp[yasu][tern][pl];
	else if(pl==n)
		return 1;
	if(tern==t)
		return 0;
	double res=0;
	if(field[pl]=='L'&&yasu==0)
		return dfs(1,tern+1,pl);
	else if(field[pl]=='B')
		return dfs(0,tern,0);
	else{
		for(int i=1; i <= 6; i++){
			if(i+pl<=n)
				res+=dfs(0,tern+1,pl+i)/6.0;
			else
				res+=dfs(0,tern+1,n-(i+pl-n))/6.0;
		}
	}
	return dp[yasu][tern][pl]=res;
}

int main(){

	while(cin>>n>>t>>l>>b&&!(n==0&&t==0&&l==0&&b==0)){
		memset(field,0,sizeof(field));
		for(int i = 0; i < 101; i++)
			for(int j = 0; j < 101; j++)
				dp[0][i][j]=dp[1][i][j]=-1;
		for(int i = 0; i < l; i++){
			int a;
			cin>>a;
			field[a]='L';
		}
		for(int i = 0; i < b; i++){
			int a;
			cin>>a;
			field[a]='B';
		}
		double res=dfs(0,0,0);
		printf("%.10f\n",res);
	}
	return 0;
}