# Aizu Online Judge
# Atomic Car Race

class Object
  def apply
    yield(self)
  end
end

solve = -> n, checkpoints, b, r, v, e, f {
  # last_changed 地点でタイヤを変えた時、start から goal まで走行するのにかかる時間
  time = -> start, goal, last_changed {
    if start == goal
      0.0
    else
      x = start - last_changed
      if x >= r
        1.0 / (v - e * (x - r))
      else
        1.0 / (v - f * (r - x))
      end + time.(start + 1, goal, last_changed)
    end
  }

  dp = Array.new(n) { Array.new(checkpoints.size + 1) }

  (n-1).downto(0) do |i|
    0.upto(checkpoints.size) do |j| # checkpoints に入れるときに -1 する
      dp[i][j] = if i == n-1
                   0.0
                 else
                   this_cp = checkpoints[i]
                   next_cp = checkpoints[i+1]
                   last_changed = j==0 ? 0 : checkpoints[j-1]
                   [ dp[i+1][i+1] + time.(this_cp, next_cp, checkpoints[i]) + b,
                     dp[i+1][j] + time.(this_cp, next_cp, last_changed) ].min
                 end
    end
  end

  return dp[0][0] + time.(0, checkpoints[0], 0)
}

# n
# a1 a2 . . . an
# b
# r v e f

loop do
  # n checkpoints
  n = gets.to_i
  break if n == 0
  checkpoints = gets.split.map(&:to_i)

  # b seconds to change tires
  b = gets.to_f

  # time to run from x to x+1:
  #   1/(v - e(x - r)) (if x >= r)
  #   1/(v - f(r - x)) (if x < r )
  r, v, e, f = gets.split.apply { |r, v, e, f| [r.to_i, *[v, e, f].map(&:to_f)] }

  puts solve.(n, checkpoints, b, r, v, e, f).round(4)
end