#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;

#define REP(i,a,b) for(i=a; i<b; ++i)
#define rep(i,n) REP(i,0,n)

double dp[102][102][2];
char board[102];

int main() {
  int n,t,b,l,i,j,x;
  while(cin>>n>>t>>l>>b, n|t|l|b) {
    memset(board, 0, sizeof(board));
    rep(i,102) rep(j,102) dp[i][j][0] = dp[i][j][1] = 0.0;
    dp[0][0][0] = 1.0;

    rep(i,l) {
      cin>>x;
      board[x] = 'L';
    }
    rep(i,b) {
      cin>>x;
      board[x] = 'B';
    }

    REP(i,0,t+1) {
      rep(j,n) {
	if(dp[i][j][0] > 0.0) {
	  for(int k=1; k<=6; ++k) {
	    int next = j+k;
	    if(next > n) {
	      //cout<<next<<" "<<n<<" ";
	      next = n - (next - n);
	      //cout<<next<<endl;
	    }
	    if(board[next] == 'B') {
	      dp[i+1][0][0] += dp[i][j][0]/6.0;
	    }else if(board[next] == 'L') {
	      dp[i+1][next][1] += dp[i][j][0]/6.0;
	    }else{
	      dp[i+1][next][0] += dp[i][j][0]/6.0;
	    }
	  }
	}
	if(dp[i][j][1] > 0.0) dp[i+1][j][0] += dp[i][j][1];
      }
    }
    //rep(i,n+1) cout<<dp[t][i]<<" ";
    //cout<<endl;
    double ans = 0.0;
    rep(i,t+1) ans += dp[i][n][0];
    printf("%.6f\n", ans);
  }
}