#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<queue>
#include<map>
#include<set>
#define INF 100000007
#define MAX 2000002
#define MAXN 2005
#define MOD 2002
using namespace std;
int next[MAX],list[MAX],from[MAX],flow[MAX],cost[MAX];
int head[MAXN],dis[MAXN],q[MAXN],path[MAXN];
int n,m,a,b,fa,fb,f,ans,cnt;
bool v[MAXN];
void insert(int x,int y,int w,int z)
{
next[++cnt]=head[x];
head[x]=cnt;
from[cnt]=x;
list[cnt]=y;
flow[cnt]=w;
cost[cnt]=z;
}
bool spfa()
{
memset(v,0,sizeof(v));
for (int i=0;i<=2*n+1;i++) dis[i]=INF;
dis[0]=1; v[0]=1; q[1]=0;
int t=0,w=1,x;
while (t!=w)
{
t=(t+1)%MOD;
x=q[t];
for (int i=head[x];i;i=next[i])
if (flow[i]&&dis[x]+cost[i]<dis[list[i]])
{
dis[list[i]]=dis[x]+cost[i];
path[list[i]]=i;
if (!v[list[i]])
{
v[list[i]]=1;
w=(w+1)%MOD;
q[w]=list[i];
}
}
v[x]=0;
}
return dis[2*n+1]!=INF;
}
void mcf()
{
int x=INF,i;
i=path[2*n+1];
while (i)
{
x=min(x,flow[i]);
i=path[from[i]];
}
i=path[2*n+1];
while (i)
{
ans+=cost[i]*x;
flow[i]-=x;
flow[i^1]+=x;
i=path[from[i]];
}
}
int main()
{
scanf("%d%d%d%d%d%d",&n,&a,&b,&f,&fa,&fb);
cnt=1;
for (int i=1;i<=n;i++)
{
scanf("%d",&m);
insert(0,i,m,0);
insert(i,0,0,0);
insert(i+n,2*n+1,m,0);
insert(2*n+1,i+n,0,0);
insert(0,n+i,INF,f);
insert(n+i,0,0,-f);
}
for (int i=1;i<=n;i++)
{
if (i+1<=n)
{
insert(i,i+1,INF,0);
insert(i+1,i,0,0);
}
if (i+a+1<=n)
{
insert(i,n+i+a+1,INF,fa);
insert(n+i+a+1,i,0,-fa);
}
if (i+b+1<=n)
{
insert(i,n+i+b+1,INF,fb);
insert(n+i+b+1,i,0,-fb);
}
}
ans=0;
while (spfa()) mcf();
printf("%d",ans);
return 0;
}