/* n,m,s,d 有n瓶新水放入s个柜子,每个柜子容量是d,每个柜子一开始有si瓶旧水 现在随机在柜子里取m瓶水,使每个人都拿到旧水的概率最大化的放新水策略 */ #include<bits/stdc++.h> using namespace std; int n,m,s,d; struct Node{ int id,c; }c[205]; int cmp(Node a,Node b){return a.c<b.c;} int ans[205]; int main(){ cin>>n>>m>>s>>d; for(int i=1;i<=s;i++){ cin>>c[i].c; c[i].id=i; } sort(c+1,c+1+s,cmp); int p=0; while(n){ ++p; if(n>=(d-c[p].c)){ n-=d-c[p].c; ans[c[p].id]=d-c[p].c; }else { ans[c[p].id]=n; n=0; break; } if(p==s)break; } if(n){ puts("impossible"); } else { int sum=0; for(int i=p+1;i<=s;i++) sum+=c[i].c; if(sum<m)puts("impossible"); else { for(int i=1;i<=s;i++) cout<<ans[i]<<' '; } } }