1031
#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <math.h>
#include <limits.h>
 
using namespace std;
 
#define INPUT_FILE "stairs.in"
#define OUTPUT_FILE "stairs.out"
 
long long m[10100] = {0};
long long mm[10100] = {0};
 
int main(void)
{
#ifdef ALEX
    freopen("input.in", "r", stdin);
    freopen("output.out", "w", stdout);
#endif
 
    long long l1,l2,l3,c1,c2,c3;
    long long N;
    long long s,e,_s,_e;
 
    cin >> c1 >> c2 >> c3 >> l1 >> l2 >> l3;
    cin >> N;
    cin >> _s >> _e;
 
    m[0] = 0;
    for(int i = 1; i < N; i++)
    {
        int t;
        cin >> t;
        m[i] = t;
        mm[i] = -1;
    }
 
    e = max(_e,_s);
    s = min(_e,_s);
    e--; s--;
 
    mm[s] = 0;
 
    long long n1 = s,n2 = s,n3 = s;
    long long c = s;
 
    for(;;) {
 
        int k = 0;
 
        if(mm[c] != -1) {
 
            if(n1 < e) {
                while(((m[c] + c1) >= m[n1+1]) && ((n1+1) <= e)) {
                    n1++;
                }
            } else {
                k++;
            }
 
            if(n1 > c) {
                if(mm[n1] == -1) mm[n1] = mm[c] + l1;
                else mm[n1] = min(mm[n1], mm[c] + l1);
            }
 
            if(n2 < e) {
                while(((m[c] + c2) >= m[n2+1]) && ((n2+1) <= e)) {
                    n2++;
                }
            } else {
                k++;
            }
            if(n2 > c) {
            if(mm[n2] == -1) mm[n2] = mm[c] + l2;
            else mm[n2] = min(mm[n2], mm[c] + l2);
            }
 
            if(n3 < e) {
                while(((m[c] + c3) >= m[n3+1]) && ((n3+1) <= e)) {
                    n3++;
                }
            } else {
                k++;
            }
            if(n3 > c) {
            if(mm[n3] == -1) mm[n3] = mm[c] + l3;
            else mm[n3] = min(mm[n3], mm[c] + l3);
            }
        }
 
        if(c == e) break;
        else c++;
 
        if(k == 3) break; else k = 0;
    }
 
    cout << mm[e];
 
    return 0;
}
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-Share Alike 2.5 License.