#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <cstdio>

using namespace std;

#define loop(i,a,b) for(int i=(a);i<int(b);i++)
#define rep(i,b) loop(i,0,b)
#define all(c) (c).begin(), (c).end()

double dp_[110][110];
bool lose[110], back[110];
int N,T,L,B;
int next(int j, int spot){
    j+=spot;
    if(j>N){
        j = N-(j-N);
    }
    return j;
}

int main(){
    while(cin>>N>>T>>L>>B && N){
        memset(dp_,0,sizeof(dp_));
        memset(lose,0,sizeof(lose));
        memset(back,0,sizeof(back));
        auto dp=dp_+1;
        dp[0][0] = 1;
        rep(i,L){ int x;cin>>x; lose[x]=true; }
        rep(i,B){ int x;cin>>x; back[x]=true; }
        rep(i,T){
            rep(j,N+1){
                if(j==N){
                    dp[i+1][N]+=dp[i][N];
                    continue;
                }
                loop(k,1,7){
                    int x=next(j,k);
                    if(back[x]){
                        dp[i+1][0] += dp[i][j]/6;
                    }else if(lose[x]){
                        dp[i+2][x] += dp[i][j]/6;
                    }else{
                        dp[i+1][x] += dp[i][j]/6;
                    }
                }
            }
            // rep(j,N+1){
            //     printf("%.2lf ", dp[1+i][j]);
            // }
            // puts("");
        }
        printf("%.10lf\n", dp[T][N]);
    }
}