#include <iostream>
#include <cstring>
#define int long long
using namespace std;
const int N = 55;
int f[N][N][N],Max[N][N],Min[N][N],lg[N];
int MAX(int l,int r) {
return max(Max[l][lg[r - l + 1]],Max[r - (1 << lg[r - l + 1]) + 1][lg[r - l + 1]]);
}
int MIN(int l,int r) {
return min(Min[l][lg[r - l + 1]],Min[r - (1 << lg[r - l + 1]) + 1][lg[r - l + 1]]);
}
int calc(int i,int j,int l,int r) {
return (max(MAX(i,l - 1),MAX(r + 1,j)) - min(MIN(i,l - 1),MIN(r + 1,j)))
* (max(MAX(i,l - 1),MAX(r + 1,j)) - min(MIN(i,l - 1),MIN(r + 1,j)));
}
signed main () {
int n; cin >> n;
int a,b; cin >> a >> b;
lg[1] = 0;
int w;
for(int i = 1;i <= n;i ++) cin >> w,Max[i][0] = Min[i][0] = w;
for(int i = 2;i <= n;i ++) lg[i] = lg[i >> 1] + 1;
for(int j = 1;j <= 6;j ++) {
for(int i = 1;i + (1 << j) - 1 <= n;i ++) {
Max[i][j] = max(Max[i][j - 1],Max[i + (1 << (j - 1))][j - 1]);
Min[i][j] = min(Min[i][j - 1],Min[i + (1 << (j - 1))][j - 1]);
}
}
memset(f,0x3f,sizeof f);
for(int i = 1;i <= n;i ++) {
for(int j = i;j <= n;j ++) {
f[i][j][1] = (MAX(i,j) - MIN(i,j)) * (MAX(i,j) - MIN(i,j));
}
}
for(int len = 2;len <= n;len ++) {
for(int i = 1;i + len - 1 <= n;i ++) {
int j = i + len - 1;
for(int l = i + 1;l < j;l ++) {
for(int r = l;r < j;r ++) {
for(int k = 2;k <= j - i + 1;k ++) {
f[i][j][k] = min(f[i][j][k],f[l][r][k - 1] + calc(i,j,l,r));
}
}
}
for(int l = i + 1;l <= j;l ++) {
for(int k = 2;k <= j - i + 1;k ++)
f[i][j][k] = min(f[i][j][k],f[l][j][k - 1] + (MAX(i,l - 1) - MIN(i,l - 1)) * (MAX(i,l - 1) - MIN(i,l - 1)));
}
for(int r = j - 1;r >= i;r --) {
for(int k = 2;k <= j - i + 1;k ++) {
f[i][j][k] = min(f[i][j][k],f[i][r][k - 1] + (MAX(r + 1,j) - MIN(r + 1,j)) * (MAX(r + 1,j) - MIN(r + 1,j)));
}
}
}
}
int res = 1e18;
for(int i = 1;i <= n;i ++) {
res = min(res,a * i + b * f[1][n][i]);
}
cout << res << endl;
return 0;
}