#include "bits/stdc++.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #pragma warning(disable:4996) using namespace std; using ld=long double; const ld eps=1e-9; #define WHATS(var)cout<<__LINE__<<' '<<#var<<"="< ostream& operator <<(ostream &os, const pair v){ os << "( " << v.first << ", " << v.second << ")"; return os; } template ostream& operator <<(ostream &os, const vector &v){ for(int i = 0; i < v.size(); i++){if(i > 0){os << " ";} os << v[i];} return os; } template ostream& operator <<(ostream &os, const vector> &v){ for(int i = 0; i < v.size(); i++){if(i > 0){os << endl;} os << v[i];} return os; } template ostream& operator <<(ostream &os, const vector> &v){ for(int i = 0; i < v.size(); i++){if(i > 0){os << endl;} os << v[i];} return os; } template ostream& operator <<(ostream &os, const set &v){ int i=0; for(auto it:v){ if(i > 0){os << ' ';} os << it; i++; } return os; } using ll = long long int; int N; ll A,B; ll W; ll solve(pairp,int day){ ll sa=day-p.second; return (p.first+(sa*(sa-1)/2*B-A*(sa-1))); } int main() { std::ios::sync_with_stdio(false); cin>>N>>A>>B>>W; vectords(N+1); for(int i=0;i>ds[i+1]; deque>que; que.emplace_back(W,0); vectoranss(N+1,1e18); anss[0]=W; for(int i=1;i<=N;++i){ auto p=que.front(); anss[i]=solve(p,i)+ds[i]; while(que.size()>=2){ auto p1=que.front(); que.pop_front(); auto p2=que.front(); que.pop_front(); if(solve(p1,i+1)>=solve(p2,i+1)){ que.push_front(p2); }else{ que.push_front(p2); que.push_front(p1); break; } } que.push_back(make_pair(anss[i],i)); while(que.size()>=2){ auto p1=que.back(); que.pop_back(); auto p2=que.back(); que.pop_back(); if(solve(p1,i+1)<=solve(p2,i+1)){ que.push_back(p1); }else{ que.push_back(p2); que.push_back(p1); break; } } } //WHATS(anss); ll answer=1e18; for(int i=0;i<=N;++i){ ll nanswer=anss[i]-(N-i)*A+(N-i)*(N-i+1)/2*B; answer=min(answer,nanswer); } cout<