#define rep(i, n) for (int i = 0; i < (int)(n); i++) #define ALL(v) v.begin(), v.end() typedef long long ll; #include using namespace std; template using V=vector; template using VV=V>; template class ConvexHullTrick{ struct F{ T a,b; F(T a,T b):a(a),b(b){} }; deque deq; bool check(F &f1,F &f2,F &f3){ return (f2.a-f1.a)*(f3.b-f2.b)>=(f2.b-f1.b)*(f3.a-f2.a); } ll f(F &f1,T x){return f1.a*x+f1.b;} public: // a_{prev} >= a void add_line(T a,T b){ F f1=F(a,b); while(deq.size()>=2 && check(deq[deq.size()-2],deq[deq.size()-1],f1)){ deq.pop_back(); } deq.push_back(f1); } // x_{prev} <= x ll query(T x){ while(deq.size()>=2 && f(deq[0],x)>=f(deq[1],x)){ deq.pop_front(); } return f(deq[0],x); } deque get_deq(){ return deq; } }; int main(){ ios::sync_with_stdio(false); std::cin.tie(nullptr); ll n,a,b,w; cin>>n>>a>>b>>w; V D(n+1); rep(i,n) cin>>D[i+1]; ConvexHullTrick cht; cht.add_line(0,0); V dp(n+1); for(ll i=1;i<=n;i++){ dp[i]=cht.query(i)+a*(1-i)+i*(i-1)/2*b+D[i]; cht.add_line(-b*i,dp[i]+a*i+i*(i+1)/2*b); } ll mi=1e18; rep(i,n+1) mi=min(mi,dp[i]-(n-i)*a+(n-i)*(n-i+1)/2*b+w); cout<