#include<cstdio>
#include<algorithm>
#include<ctype.h>
#define int long long
using namespace std;
inline int read()
{
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
int n,a,b,s,v[100005],mul,ans=0x7f7f7f7f7f7f7f7f,now;
bool check(int mid)
{
now=-0x7f7f7f7f7f7f7f7f;int dp[100005]={0};
for(int i=1;i<=n;i++)
v[i]+=mid;
for(int i=1;i<=n;i++)
dp[i]=max(dp[i-1]+v[i],v[i]);
for(int i=1;i<=n;i++)
now=max(now,dp[i]),v[i]-=mid;
return now*(1ll<<mul)>=s;
}
int work()
{
int l=0,r=1e11+5,ret=0,cnt=0;
while(l<=r&&cnt<=60)
{
++cnt;
int mid=(l+r)>>1;
if(check(mid))ret=mid,r=mid-1;
else l=mid+1;
}
return ret;
}
signed main()
{
n=read(),a=read(),b=read(),s=read();
for(int i=1;i<=n;i++)
v[i]=read();
for(mul=0;(1<<mul)<=s;mul++)
{
ans=min(ans,work()*a+mul*b);
}
printf("%lld",ans);
return 0;
}
为啥会WA了几个点,大部分都过了,应该是细节问题吧qwq