#include #define f first #define s second using namespace std; typedef long long ll; ll i,j,p,q,n,m,k,str[100006],A,B,ind,br,Mi,Ma; bool b[100006]; clock_t T; ll ans[100006]; void read() { freopen("cheating.in","r",stdin); freopen("cheating.out","w",stdout); } void input() { cin>>n>>m>>A>>B; for(i=1;i<=n;i++) cin>>str[i]; } void output(ll b[]) { for(i=1;i<=m;i++) cout<A) { p=0; q=0; for(i=1;i<=m;i++) { k=LLONG_MAX; for(j=1;j<=n;j++) { if(b[j])continue; p=abs(j-q)*B+abs(str[j]-str[q])*A; if(p=4700) break; } j=i+1; if(j<=m) { for(i=q+1;i<=n;i++) { if(!b[i]) { ans[j]=i; j++; if(j>m)break; } } } if(j<=m) { for(i=q-1;i>=1;i--) { if(!b[i]) { ans[j]=i; j++; if(j>m)break; } } } } else { pair a[100006]; for(i=1;i<=n;i++) { a[i].f=str[i]; a[i].s=i; } sort(a+1,a+n+1); p=0; q=0; for(i=1;i<=m;i++) { k=LLONG_MAX; for(j=1;j<=n;j++) { if(b[j])continue; p=abs(a[j].s-a[q].s)*B+abs(a[j].f-a[q].f)*A; if(p=4700) break; } j=i+1; if(j<=m) { for(i=q+1;i<=n;i++) { if(!b[a[i].s]) { ans[j]=a[i].s; j++; if(j>m)break; } } } if(j<=m) { for(i=q-1;i>=1;i--) { if(!b[a[i].s]) { ans[j]=a[i].s; j++; if(j>m)break; } } } } output(ans); } void greedy11() { //for(;;); p=0; q=0; ll stupka=min((ll)sqrt(m*n),1500ll); for(i=1;i<=m;i++) { k=LLONG_MAX; Ma = max(q-stupka,1ll); Mi = min(q+stupka,n); for(j=Ma;j<=Mi;j++) { if(b[j])continue; p=abs(j-q)*B+abs(str[j]-str[q])*A; if(p=4700) break; } j=i+1; if(j<=m) { q=ans[j-1]; for(i=q+1;i<=n;i++) { if(!b[i]) { ans[j]=i; j++; if(j>m)break; } } } if(j<=m) { for(i=q-1;i>=1;i--) { if(!b[i]) { ans[j]=i; j++; if(j>m)break; } } } output(ans); } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); read(); input(); if(n*m<=60000000)greedy1(); else greedy11(); return 0; }