n,T,X,Y=map(int,input().split()) d=list(map(int,input().split())) d.sort() Z=min(X,Y) p=[] for v in d: if len(p)==0 or v-p[-1][-1]>T: p+=[[]] p[-1]+=[v] c=[len(p[i]) for i in range(len(p))] c.sort() c.reverse() c=[0]+c for i in range(1,len(c)): c[i]+=c[i-1] from bisect import bisect_left print(*[(bisect_left(c,i)-1)*Z for i in range(1,n+1)])