#include using namespace std; #define int long long typedef vectorvint; typedef pairpint; typedef vectorvpint; #define rep(i,n) for(int i=0;i<(n);i++) #define reps(i,f,n) for(int i=(f);i<(n);i++) #define all(v) (v).begin(),(v).end() #define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();it++) #define pb push_back #define mp make_pair #define fi first #define se second templateinline void chmin(A &a,B b){if(a>b)a=b;} templateinline void chmax(A &a,B b){if(a> ls; // slope, intercept bool check(pair l1, pair l2, pair l3) { return (l2.first - l1.first) * (l3.second - l2.second) >= (l2.second - l1.second) * (l3.first - l2.first); } void add(ll a, ll b) { pair l(a, b); while (ls.size() >= 2 && check(ls[ls.size() - 2], ls[ls.size() - 1], l)) ls.pop_back(); ls.emplace_back(l); } ll f(int k, ll x) { return ls[k].first * x + ls[k].second; } ll query(ll x) { int low = -1; int high = ls.size() - 1; while (high - low > 1) { int mid = (low + high) / 2; (f(mid, x) <= f(mid + 1, x) ? low : high) = mid; } return f(high, x); } }; int N,A,B,W; int D[300000]; signed main(){ cin>>N>>A>>B>>W; rep(i,N)cin>>D[i]; W-=A*N; W+=B*N*(N+1)/2; int mi=0; ConvexHullTrick cht; cht.add(0,0); rep(i,N){ int t=-cht.query(i)+D[i]+A-(N-i)*(i+1)*B; chmin(mi,t); cht.add((i+1)*B,-t-B*N*(i+1)); } cout<