int main() { freopen("sequence.in","r",stdin); freopen("sequence.out","w",stdout); scanf("%d%d%d%d",&N,&Q,&A,&B); root=new NODE(1,Q); pair<NODE*,long double> MIN; NODE *p; for (int i=1;i<=N;i++) { if (i>1) if (A<B) { MIN=findMin(root); p=MIN.first; long double &mid=MID[i]; mid=MIN.second; Splay(p); NODE *q0, *q1(p->l), *q2(p->r); if (mid-p->xl>eps) q1=new NODE(p->xl,mid,p->a,p->b,p->c,p->l,0); if (p->xr-mid>eps) q2=new NODE(mid,p->xr,p->a,p->b,p->c,0,p->r); if (q1) q1->adjx(A); if (q2) q2->adjx(B); q0=new NODE(mid+A,mid+B,0,0,p->inter(mid),q1,q2); root=q0; delete p; } else root->adjx(A); double x; scanf("%lf",&x); root->adjy(1,-2*x,x*x); } MIN=findMin(root); p=MIN.first; long double x=MIN.second, y=p->inter(x); for (int i=N;i;i--) { ans[i]=x; if (x>MID[i]+B) x-=B; else if (x<MID[i]+A) x-=A; else x=MID[i]; } for (int i=1;i<N;i++) printf("%.8f ",(double)ans[i]); printf("%.8f\n%.8f\n",(double)ans[N],(double)y); return 0; }