题意:






思路:
%2C%E5%85%B6%E4%B8%ADm%E4%B8%8A%E9%99%90%E4%B8%BA7e6%EF%BC%8C%E5%B9%B6%E4%B8%8D%E8%83%BD%E9%80%9A%E8%BF%87&preview=true)









%20%5Crfloor%EF%BC%8C%E8%BF%99%E4%B8%AA%E6%97%B6%E5%80%99%E5%9B%A0%E4%B8%BAl_1%E4%B8%80%E7%9B%B4%E6%B2%A1%E6%9C%89%E8%A2%AB%E5%88%87%EF%BC%8C%E6%89%80%E4%BB%A5%E4%B9%9F%E4%B8%80%E7%9B%B4%E5%A2%9E%E9%95%BF%E7%9D%80&preview=true)
%20%5Crfloor&preview=true)
%2B(1-p)*C%5Crfloor&preview=true)
*C%E8%BF%99%E4%B8%AA%E4%B8%9C%E8%A5%BF%E6%98%AF%E4%B8%80%E4%B8%AA%E5%A4%A7%E4%BA%8E%E7%AD%89%E4%BA%8E0%E7%9A%84%E6%95%B0%EF%BC%8C%E6%89%80%E4%BB%A5%E5%8F%AF%E4%BB%A5%E6%8E%A8%E5%87%BAl_1%20%3E%3D%20l_2&preview=true)




%20%5Crfloor&preview=true)
%20%5Crfloor%20-%20%5Clfloor%20p*x_1%20%5Crfloor&preview=true)
%20%5Crfloor%20-%20%5Clfloor%20p*x_1%20%5Crfloor%E6%94%BE%E7%BC%A9%E4%B8%80%E4%B8%8B&preview=true)




%E5%9C%B0%E5%8E%BB%E7%BB%B4%E6%8A%A4%E6%9C%80%E5%A4%A7%E5%80%BC%EF%BC%8Cq_1%E4%B8%80%E5%BC%80%E5%A7%8B%E4%B8%BA%E9%99%8D%E5%BA%8F%E6%8E%92%E5%BA%8F%E7%9A%84x_i%EF%BC%8C&preview=true)








#include <cstdio>
#include <queue>
#include <algorithm>
#include <iostream>
using namespace std;
typedef long long ll;
const int N = 1e5 + 10;
int n,m,q,u,v,t;
double p;
int a[N];
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
return s*w;
}
struct que {
int tag = 0;
int a[7500005], l, r;
que(){l = r = 1;}
bool empty() {return l == r;}
void push(int x) {a[r] = x - tag;++r;}
void add() {tag += q;}
int front() { return a[l] + tag;}
int pop() {++l; return a[l-1] + tag;}
}q1,q2,q3;
//取出三个队列队头的最大值,并弹出
int getmx(){
int mx = -0x3f3f3f3f;
int flag = 0;
if(!q1.empty() && mx < q1.front()) {mx = q1.front();flag = 1;}
if(!q2.empty() && mx < q2.front()) {mx = q2.front();flag = 2;}
if(!q3.empty() && mx < q3.front()) {mx = q3.front();flag = 3;}
switch(flag){
case 1 : q1.pop();break;
case 2 : q2.pop();break;
default : q3.pop();
}
return mx;
}
void cut(int x) {
q1.add(),q2.add(),q3.add();
q2.push(int(p*x));
q3.push(x - int(p*x));
}
void solve(){
for(int i = 1;i <= m;i++){
int x = getmx();
if(i%t == 0) printf("%d ",x);
cut(x);
}
puts("");
}
int main(){
n = read(),m = read(),q = read(),u = read(),v = read(),t = read();
p = u * 1.0 / v;
for(int i = 1;i <= n;i++) a[i] = read();
sort(a + 1,a + 1 + n);
for(int i = n;i >= 1;i--) q1.push(a[i]);
solve();
for(int i = 1;i <= n + m;i++){
int x = getmx();
if(i%t == 0) printf("%d ",x);
}
return 0;
}