#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <cmath>

using namespace std;

#define EPS (1e-10)
#define EQ(a,b) (abs((a)-(b))<EPS)

int n;
double dp[101][30001];
double b,e,v,f;
int r;
int a[1001];
double mem[30000];
const int INF=1000000000;


double dfs(int idx,int runDist){
    if(!EQ(dp[idx][runDist],INF))return dp[idx][runDist];
    if(idx==n)
        return 0;
    double res=INF;
    double cost=0;
    int ndist=a[idx+1]-a[idx];
    res=min(res,dfs(idx+1,ndist)+mem[ndist-1]+b);
    // no change
    if(runDist>=1)
        res=min(res,dfs(idx+1,ndist+runDist)+mem[ndist+runDist-1]-mem[runDist-1]);
    else
        res=min(res,dfs(idx+1,ndist+runDist)+mem[ndist+runDist-1]);
    return dp[idx][runDist]=res;
}

int main(){
    while(cin>>n&&n!=0){
        a[0]=0;
        for(int i = 0; i < n; i++)cin>>a[i+1];
        cin>>b;
        cin>>r>>v>>e>>f;
        for(int i = 0; i < 101; i++)for(int j = 0; j < 30001; j++)dp[i][j]=INF;
        memset(mem,0,sizeof(mem));
        mem[0]=1.0/(v-f*(r));
        for(int i = 1; i < 10001; i++){
            if(i>=r)
                mem[i]=mem[i-1]+1.0/(v-e*(i-r));
            else
                mem[i]=mem[i-1]+1.0/(v-f*(r-i));
        }
        for(int i = 0; i < 30000; i++)
            dp[n][i]=0;
        for(int i = n-1; i >= 0; i--){
            for(int j = 10001; j >= 0; j--){
                int ndist=a[i+1]-a[i];
                dp[i][j]=min(dp[i][j],dp[i+1][ndist]+mem[ndist-1]+b);
                if(j>=1)
                    dp[i][j]=min(dp[i][j],dp[i+1][ndist+j]+mem[ndist+j-1]-mem[j-1]);
                else
                    dp[i][j]=min(dp[i][j],dp[i+1][ndist+j]+mem[ndist+j-1]);
            }
        }
        printf("%.10f\n",dp[0][0]);
    }
    return 0;
}