#pragma warning(disable:4996)#include<cstdio>#include<cstring>#include<string>#include<cmath>#include<vector>#include<algorithm>#include<iostream>#include<time.h>usingnamespacestd;
constint INF = 0x3f3f3f3f;
int month[13], dp[13][100000], h, s, f;
int HireOrFire(int last, int now)
{
if (now<last)
return (last - now)*f;
if (now>last)
return (now - last)*h;
return0;
}
int vs_main()
{
int T;
while (scanf("%d", &T),T)
{
int i, j, k, least, most = 0;
scanf("%d%d%d", &h, &s, &f);
for (i = 1; i <= T; i++)
{
scanf("%d", &month[i]);
if (month[i]>most)
most = month[i];
}
memset(dp, INF, sizeof(dp));
for (j = month[1]; j <= most; j++)
{
dp[1][j] = j*h + j*s;
}
for (i = 2; i <= T; i++)
{
for (j = month[i]; j <= most; j++)
{
for (k = month[i - 1]; k <=most; k++)
{
dp[i][j] = min(dp[i][j], dp[i - 1][k] +HireOrFire(k, j) + j*s);
}
}
}
least = INF;
for (i = month[T]; i <= most; i++)
if (dp[T][i]<least)
least = dp[T][i];
printf("%d\n", least);
}
return0;
}