sealed class State {
    object Lose: State()
    object Back: State()
    object Empty: State()
}
fun search(current: Int, turn: Int, state: Array<State>, memo: Array<DoubleArray>): Double {
    return when{
        current == memo.size && turn >= -1 -> 1.0
        turn < 0 -> 0.0
        current > memo.size -> search(memo.size - (current - memo.size), turn, state, memo)
        memo[current][turn] >= 0.0 -> memo[current][turn]
        else -> when(state[current]) {
            State.Lose -> ((1 .. 6).map{t -> search(current + t, turn - 2, state, memo)}.sum() / 6.0).also{memo[current][turn] = it}
            State.Back -> search(0, turn, state, memo)
            State.Empty ->  ((1 .. 6).map{t -> search(current + t, turn - 1, state, memo)}.sum() / 6.0).also{memo[current][turn] = it}
        }
    }
}
fun main(args: Array<String>?): Unit {
    while(true) {
        val (n, t, l, b) = readLine()!!.trim().split(' ').map(String::toInt)
        if (n == 0) return
        val memo = Array(n){DoubleArray(t){-1.0} }
        val state = Array(n){State.Empty as State}
        repeat(l){
            state[readLine()!!.toInt()] = State.Lose
        }
        repeat(b){
            state[readLine()!!.toInt()] = State.Back
        }
        println(
                String.format("%.10f", search(0, t - 1, state, memo))
        )
    }
}
