#include <bits/stdc++.h>
using namespace std;
ifstream f("euro.in");
ofstream g("euro.out");
int n,t;
long long val,sum;
struct line{
long long x,y;
} aint[34567*4+10];
long long eval(int a,int b,int poz)
{
return (long long)(a*poz+b);
}
void addline(int poz,int l,int r,long long a,long long b)
{
if(l==r){
if(eval(a,b,l)>eval(aint[poz].x,aint[poz].y,l)){
aint[poz].x=a;
aint[poz].y=b;
}
return ;
}
int mi=(l+r)/2;
bool evalr=eval(aint[poz].x,aint[poz].y,r )>=eval(a,b,r );
bool evalm=eval(aint[poz].x,aint[poz].y,mi)>=eval(a,b,mi);
if(evalr&&evalm)
addline(poz*2,l,mi,a,b);
else if((!evalr)&&evalm)
addline(poz*2+1,mi+1,r,a,b);
else
{
swap(aint[poz].x,a);
swap(aint[poz].y,b);
if(evalr)
addline(poz*2+1,mi+1,r,a,b);
else
addline(poz*2,l,mi,a,b);
}
return ;
}
long long get(int poz,int l,int r,int val)
{
if(l==r)
return eval(aint[poz].x,aint[poz].y,val);
long long ret=eval(aint[poz].x,aint[poz].y,val);
int mi=(l+r)/2;
if(val<=mi)
ret=max(ret,get(poz*2,l,mi,val));
else
ret=max(ret,get(poz*2+1,mi+1,r,val));
return ret;
}
int main()
{
f>>n>>t;
addline(1,1,n,0,0);
for(int i=1;i<=n;i++){
int x;
f>>x;sum+=x;
val=get(1,1,n,i)+(long long)sum*i-t;
addline(1,1,n,-sum,val);
}
g<<val;
return 0;
}