def stopped_at(position, turn, value, loses, backs, steps, lost_steps, squares)
  if position > squares
    stopped_at(squares * 2 - position, turn, value, loses, backs, steps, lost_steps, squares)
    return
  end
  if loses.include?(position)
    lost_steps[turn][position] += value
    return
  end
  if backs.include?(position)
    steps[turn][0] += value
    return
  end
  steps[turn][position] += value
end
while true
  parameters = gets.split(" ").map(&:to_i)
  break if parameters.all?{|number| number == 0}
  squares, turns, loses, backs = parameters
  lose_squares = []
  loses.times do
    lose_squares.push(gets.to_i)
  end
  back_squares = []
  backs.times do 
    back_squares.push(gets.to_i)
  end

  steps = Array.new(turns + 1) do 
    Array.new(squares + 1){0}
  end
  lost_steps = Array.new(turns + 1) do 
    Array.new(squares + 1){0}
  end

  steps[0][0] = 1

  turns.times do |i|
    steps[i].each.with_index do |value, j|
      steps[i + 1][j] += value * 6 if j == squares
      6.times do |k|
        stopped_at(j + k  + 1, i + 1, value, lose_squares, back_squares, steps, lost_steps, squares) if  value != 0 && j != squares
      end
    end
    lost_steps[i].each.with_index do |value, j|
      steps[i + 1][j] += value * 6 unless value == 0
    end
  end

  result =  (steps[turns][squares] / (6 ** turns).to_f).round(6)
  puts sprintf("%.6f", result)
end