#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  long long x = 0, f = 1;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    x = (x << 1) + (x << 3) + (c ^ 48);
    c = getchar();
  }
  return x * f;
}
const long long N = 4e5 + 10;
long long a[N];
struct node {
  double t;
  long long dt;
  bool operator<(const node &x) const { return t > x.t; }
  node() {}
  node(double tt, double delta) {
    t = tt;
    dt = delta;
  }
};
double ans[N];
signed main() {
  long long n = read(), l = read(), v1 = read(), v2 = read();
  for (long long i = 1; i <= n; i++) a[i] = read();
  priority_queue<node> que;
  double lim = l - (double)l * v1 / (v1 + v2);
  for (long long i = 1; i <= n; i++) {
    if (a[i] < lim) {
      que.push(node(2 * l + a[i] - lim, 1));
      que.push(node(2 * l, -1));
    }
    que.push(node(max(0.0, a[i] - lim), 1));
    que.push(node(a[i], -1));
  }
  long long cnt = 0;
  double lst = 0;
  while (!que.empty()) {
    ans[cnt] += que.top().t - lst;
    cnt += que.top().dt;
    lst = que.top().t;
    que.pop();
  }
  ans[cnt] += 2 * l - lst;
  for (long long i = 0; i <= n; i++) printf("%.9lf\n", ans[i] / (2 * l));
  return 0;
}
