#include<bits/stdc++.h>
using namespace std;

const long long MaxN=1e5+5, INF=1e18;

long long n,L,R,X,u,v;
long long a[MaxN],d[MaxN];
vector<long long> b;
vector<long long> vt[MaxN];
bool used[MaxN];

long long get_id(long long x)
{
    return lower_bound(b.begin(),b.end(),x)-b.begin()+1;
}

void dijkstra()
{
    priority_queue<pair<long long,long long>,
                   vector<pair<long long,long long>>,
                   greater<pair<long long,long long>>> pq;

    d[u]=0;
    pq.push({0,u});

    while(!pq.empty())
    {
        long long du=pq.top().first;
        long long x=pq.top().second;
        pq.pop();

        if(du!=d[x])
            continue;

        if(x-1>=1)
        {
            if(d[x-1]>du+L)
            {
                d[x-1]=du+L;
                pq.push({d[x-1],x-1});
            }
        }

        if(x+1<=n)
        {
            if(d[x+1]>du+R)
            {
                d[x+1]=du+R;
                pq.push({d[x+1],x+1});
            }
        }

        long long id=get_id(a[x]);

        if(used[id]==0)
        {
            used[id]=1;

            for(auto y:vt[id])
            {
                if(d[y]>du+X)
                {
                    d[y]=du+X;
                    pq.push({d[y],y});
                }
            }
        }
    }
}

void input()
{
    cin>>n>>L>>R>>X>>u>>v;

    for(long long i=1;i<=n;i++)
    {
        cin>>a[i];
        b.push_back(a[i]);
    }

    sort(b.begin(),b.end());

    b.erase(unique(b.begin(),b.end()),b.end());

    for(long long i=1;i<=n;i++)
    {
        long long id=get_id(a[i]);
        vt[id].push_back(i);
    }
}

void output()
{
    for(long long i=1;i<=n;i++)
        d[i]=INF;

    dijkstra();

    cout<<d[v];
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    input();
    output();
}
