### constant

LOSE = 1
BACK = 2

### main

loop do
  n, t, l, b = gets.split.map(&:to_i)
  break if (n | t | l | b) == 0

  brds = (0...n).map{nil}
  l.times.each{brds[gets.to_i] = LOSE}
  b.times.each{brds[gets.to_i] = BACK}
  #p brds

  pbs = (0...n).map{0.0}
  lss = (0...n).map{0.0}
  pbs[0] = 1.0
  gl = 0.0

  t.times do
    pbs0 = (0...n).map{0.0}
    lss0 = (0...n).map{0.0}

    for i in (0...n)
      pbi = pbs[i]
      next if pbi == 0.0

      pbi6 = pbi / 6

      for dc in (1..6)
        j = i + dc

        if j > n
          j = 2 * n - j
        end

        if j == n
          gl += pbi6
        elsif brds[j] == LOSE
          lss0[j] += pbi6
        elsif brds[j] == BACK
          pbs0[0] += pbi6
        else
          pbs0[j] += pbi6
        end
      end
    end

    pbs = (0...n).map{|i| pbs0[i] + lss[i]}
    lss = lss0
  end

  #p [gl, pbs.inject(:+) + lss.inject(:+)]
  puts "%.6f" % gl
end