#include <climits>
#include <iostream>
#include <vector>
using namespace std;
vector<int> dis;
int main() {
    //处理一下输入,有三种距离的路程,L1,L2,L3,对应的价格为C1,C2,C3
    //dis[i]代表第i个车站距离第一个车站的距离,那么显然dis[0]随意赋值
    //dis[1]=1,剩下的话依据题意输入即可
    int l1, l2, l3, c1, c2, c3;
    while (cin >> l1 >> l2 >> l3 >> c1 >> c2 >> c3) {
        dis.clear();
        dis.push_back(-1);
        dis.push_back(0);
        //start和end是起始站和终点站
        int start, end;
        cin >> start >> end;
        int N;//火车站数量
        cin >> N;
        int dp[N + 1][N +
                      1]; //dp[i][j]表示第i个车站出发去第j个车站的最小花费
        for (int i = 1; i <= N; i++) {
            for (int j = 1; j <= N; j++) {
                dp[i][j] =
                    INT_MAX; //因为我们后面要取小值,所以初始化尽量最大
            }
        }
        for (int i = 1; i <= N; i++) {
            dp[i][i] =
                0; //注意一下从i车站出发去i车站的话,最小花费应该是0
        }
        int x;
        int num = N - 1;
        //输入N-1个整数,分别代表从该线路上的第一个站,到第2个站,第3个站,……,第N个站的距离。
        while (num--) {
            cin >> x;
            dis.push_back(x);
        }
        for (int i = 1; i <= N; i++) {
            for (int j = i + 1; j <= N; j++) {
                int d = dis[j];
                int k = j - 1;
                int c = k;
                //依次比较上一趟应该买三种中的哪一种(前提是要能买)
                while (d - dis[k] <= l1 && k >= i) {
                    dp[i][j] = min(dp[i][j], dp[i][k] + c1);
                    k--;
                }
                k = c;
                while (d - dis[k] <= l2 && k >= i) {
                    dp[i][j] = min(dp[i][j], dp[i][k] + c2);
                    k--;
                }
                k = c;
                while (d - dis[k] <= l3 && k >= i) {
                    dp[i][j] = min(dp[i][j], dp[i][k] + c3);
                    k--;
                }
            }
        }
        cout << dp[start][end] << endl;
    }
}
// 64 位输出请用 printf("%lld")