1 #include<cstdio>
2 #include<iostream>
3 #include<cmath>
4 #include<cstring>
5 #include<algorithm>
6 #define maxn 100005
7 #define eps 1E-9
8 #define inf 1E100
9 using namespace std;
10 int n,flag,cnt,siz,pos[maxn];
11 double w[maxn],d[maxn],dist[maxn],tot,tmp,ans,t1,t2,t3,val[maxn];
12 double a,b,l,r,f[maxn],p[maxn];
13 struct Line{
14 double k,b;
15 int id;
16 }line[maxn],tl[maxn];
17 bool cmp(Line x,Line y){
18 if (abs(x.k-y.k)>eps) return x.k>y.k;
19 return x.b<y.b;
20 }
21 double calc(Line l1,Line l2){return -(l1.b-l2.b)/(l1.k-l2.k);}
22 struct DATA{
23 double x;
24 int id;
25 }list[maxn];
26 void solve(){
27 memcpy(tl,line,sizeof(line));
28 sort(tl+1,tl+n+1,cmp);
29 for (int i=1,j,t;i<=n;i=j){
30 line[++cnt]=tl[i],t=0;
31 for (j=i;tl[j].k==tl[i].k;j++) if (tl[j].b==tl[i].b) pos[tl[j].id]=cnt,t++;
32 for (j=i;tl[j].k==tl[i].k;j++) if (tl[j].b==tl[i].b) p[tl[j].id]=1.0/t;
33 }
34 list[siz=1]=(DATA){-inf,1};
35 for (int i=2;i<=cnt;i++){
36 double t=calc(line[i],line[list[siz].id]);
37 while (t<list[siz].x) siz--,t=calc(line[i],line[list[siz].id]);
38 list[++siz]=(DATA){t,i};
39 }
40 list[++siz]=(DATA){inf,cnt+1};
41 l=a,r=b,flag=0;
42 for (int i=1;i<=siz&&flag!=2;i++){
43 if (list[i].x>l){
44 if (!flag) flag=1,f[list[i-1].id]=(list[i].x-l)/(r-l);
45 else if (flag==1&&list[i].x<r) f[list[i-1].id]=(list[i].x-list[i-1].x)/(r-l);
46 else if (list[i].x>=r) f[list[i-1].id]=(r-list[i-1].x)/(r-l),flag=2;
47 }
48 }
49 for (int i=1;i<=n;i++) p[i]=f[pos[i]]*p[i];
50 for (int i=1;i<=n;i++) printf("%.3lf\n",p[i]);
51 }
52 int main(){
53 scanf("%d%lf%lf",&n,&a,&b);
54 for (int i=1;i<n;i++) scanf("%lf",&w[i]);
55 for (int i=1;i<=n;i++) scanf("%lf",&d[i]);
56 for (int i=1;i<=n;i++) dist[i]=d[i];
57 for (int i=1;i<=n;i++) dist[i]+=dist[i-1];
58 tot=dist[n];
59 if (a==b){
60 w[n]=a;
61 t1=w[1]*tot,t3=w[1];
62 for (int i=2;i<=n;i++){
63 tmp+=w[i]*(dist[i]-dist[1])*(tot-dist[i]+dist[1]);
64 t1+=w[i]*(dist[i]-dist[1]);
65 t2+=w[i]*(tot-dist[i]+dist[1]);
66 t3+=w[i];
67 }
68 val[1]=ans=tmp;
69 for (int i=2;i<=n;i++){
70 tmp+=t1*d[i]-t2*d[i]-t3*d[i]*d[i];
71 ans=min(ans,tmp);
72 val[i]=tmp;
73 t1+=w[i]*tot,t2-=w[i]*tot;
74 t1-=t3*d[i],t2+=t3*d[i];
75 }
76 cnt=0;
77 for (int i=1;i<=n;i++) if (abs(val[i]-ans)<=eps) cnt++;
78 for (int i=1;i<=n;i++) if (abs(val[i]-ans)<=eps) printf("%.3lf\n",1.0/cnt);
79 else puts("0.000");
80 return 0;
81 }
82 l=0,r=tot;
83 for (int i=1;i<=n;i++) l+=d[i],r-=d[i],line[i].k=l*r;
84 t1=w[1]*tot,t3=w[1];
85 for (int i=2;i<=n;i++){
86 tmp+=w[i]*(dist[i]-dist[1])*(tot-dist[i]+dist[1]);
87 t1+=w[i]*(dist[i]-dist[1]);
88 t2+=w[i]*(tot-dist[i]+dist[1]);
89 t3+=w[i];
90 }
91 line[1].b=tmp;
92 for (int i=2;i<=n;i++){
93 tmp+=t1*d[i]-t2*d[i]-t3*d[i]*d[i];
94 line[i].b=tmp;
95 t1+=w[i]*tot,t2-=w[i]*tot;
96 t1-=t3*d[i],t2+=t3*d[i];
97 }
98 for (int i=1;i<=n;i++) line[i].id=i;
99 solve();
100 return 0;
101 }