#include<cstdio>
#include<algorithm>
using namespace std;
int n,c,h,le,f[2][101],i,j,xx;
char cs;
int read(){
cs=getchar();xx=0;
while(cs<‘0‘||cs>‘9‘) cs=getchar();
while(cs>=‘0‘&&cs<=‘9‘) xx=xx*10+cs-48,cs=getchar();
return xx;
}
int main(){
n=read();c=read();h=read();
for (i=1;i+h<=100;i++) f[0][i+h]=i*i;
le=h;
int la=1,now=0,mi,x;
for (i=1;i<n;i++){
swap(la,now);
h=read();
x=h;
if (h<le){
mi=f[la][le]+abs(le-h)*c;
for (j=le+1;j<=100;j++)
if (mi>f[la][j]+abs(j-h)*c) mi=f[la][j]+abs(j-h)*c;
for (j=h;j<le;j++) f[now][j]=mi,mi-=c;
h=le;
}
mi=f[la][le]+abs(le-h)*c;
for (j=le;j<h;j++) if (mi>f[la][j]+abs(j-h)*c) mi=f[la][j]+abs(j-h)*c;
for (;j<=100;j++){
if (mi>f[la][j]) mi=f[la][j];
f[now][j]=mi;
mi+=c;
}
mi=f[la][100]+c;
for (j=99;j>=h;j--){
if (f[now][j]>mi) f[now][j]=mi;
if (mi>f[la][j]) mi=f[la][j];
mi+=c;
}
for (j=1;j+x<=100;j++) f[now][j+x]+=j*j;
le=x;
}
h=f[now][le];
for (i=le+1;i<=100;i++)
if (f[now][i]<h) h=f[now][i];
printf("%d\n",h);
}