#include <bits/stdc++.h>
#define int long long
using namespace std;
ifstream fin ("euro.in");
ofstream fout("euro.out");
const int dim=34569;
int sp[dim],dp[dim];
struct el
{
int a, b;
} v[4*dim];
int y(el line,int x)
{
int res=line.a*x + line.b;
return res;
}
void update(int nod,int l,int r,el line)
{
if (l==r)
{
if (y(line,nod) > y(v[nod],nod))
v[nod] = line;
return;
}
int m=(l+r)/2;
int vechi = y(v[nod],m), nou = y(line,m);
if (vechi<nou)
v[nod]=line;
if (line.a<0)
update(2*nod,l,m,line);
else update(2*nod+1,m+1,r,line);
}
int query (int nod,int l,int r,int x)
{
int val=y(v[nod],x);
if (l==r)
return val;
int m=(l+r)/2;
if (x<=m)
return max(query(2*nod,l,m,x),val);
else return max(query(2*nod+1,m+1,r,x),val);
}
int32_t main()
{
int n,t,x;
fin>>n>>t;
for (int i=1;i<=n;i++)
{
fin>>x;
sp[i]=sp[i-1]+x;
}
update(1,1,n,{0,0});
for (int i=1;i<=n;i++)
{
dp[i]=-t+sp[i]*i+query(1,1,n,i);
update(1,1,n,{-sp[i],dp[i]});
}
fout<<dp[n]<<'\n';
return 0;
}