import std.stdio;
import std.ascii;
import std.range;
import std.array;
import std.functional;
import std.algorithm;
import std.conv;
import std.container;
import std.math;
import std.numeric;
import std.string;
import std.c.string;
import std.random;
import std.regex;
import std.typecons;

void main() {
    int N;
    int[] A;
    real B;
    int R; real V, E, F;

    bool input() {
        N = readln.chomp.to!int;
        if (N == 0) return false;
        A = readln.chomp.split(" ").map!(to!int).array;
        B = readln.chomp.to!real;
        scanf("%d %Lf %Lf %Lf\n", &R, &V, &E, &F);
        return true;
    }
    void solve() {
        real time(int d) {
            real t = 0;
            for (int x = 0; x < min(d, R); x++) {
                t += 1.0 / (V - F * (R - x));
            }
            for (int x = min(d, R); x < d; x++) {
                t += 1.0 / (V - E * (x - R));
            }
            return t;
        }
        A = [0] ~ A;
        N = cast(int)(A.length);
        auto dp = new real[N];
        dp[] = 1e10;
        dp[0] = 0;
        foreach (i; 0 .. N - 1) {
            foreach (j; i + 1 .. N) {
                dp[j] = min(dp[j], dp[i] + time(A[j] - A[i]) + (i == 0 ? 0 : B));
            }
        }
        writefln("%.20f", dp[N - 1]);
    }

    while (input()) solve();
}