#include <bits/stdc++.h>
using namespace std;
double eps = 1e-6;
int dblcmp(double d) {
  if (fabs(d) < eps) return 0;
  return (d > 0) ? 1 : -1;
}
const int maxn = 100050;
int n;
double l, v1, v2, s;
double a[maxn];
vector<pair<double, double> > v;
const int maxsize = 300050;
template <class T>
class Split {
  T s[maxsize];
  int n;

 public:
  Split() : n(0) {}
  void ins(const T &t) { s[n++] = t; }
  void init(void) {
    sort(s, s + n);
    n = unique(s, s + n) - s;
  }
  int tosmall(const T &t) { return lower_bound(s, s + n, t) - s; }
  T tobig(int t) { return s[t]; }
  int getsize(void) { return n; }
  T getmax(void) { return s[n - 1]; }
  T getmin(void) { return s[0]; }
  void clear(void) { n = 0; }
};
Split<double> sp;
const int H = 19, M = 1 << H;
int seg[M << 1] = {};
void add(int a, int b, int c) {
  if (a > b) return;
  a = a + M - 1, b = b + M + 1;
  while (a ^ b ^ 1) {
    if (~a & 1) seg[a ^ 1] += c;
    if (b & 1) seg[b ^ 1] += c;
    a >>= 1, b >>= 1;
  }
}
int ask(int a) {
  a += M;
  int res = 0;
  while (a > 0) res += seg[a], a >>= 1;
  return res;
}
double ans[maxn];
int main(void) {
  ios::sync_with_stdio(false);
  cin >> n >> l >> v1 >> v2;
  for (int i = 0; i < (n); ++i) cin >> a[i];
  s = l * v2 / (v1 + v2);
  for (int i = 0; i < (n); ++i) {
    if (dblcmp(a[i] - s) >= 0)
      v.push_back(make_pair(2 * l - a[i], 2 * l + s - a[i]));
    else
      v.push_back(make_pair(0, s - a[i])),
          v.push_back(make_pair(2 * l - a[i], 2 * l));
  }
  sp.ins(-1e20);
  for (int i = 0; i < (v.size()); ++i) sp.ins(v[i].first), sp.ins(v[i].second);
  sp.init();
  for (int i = 0; i < (v.size()); ++i)
    add(sp.tosmall(v[i].first), sp.tosmall(v[i].second) - 1, 1);
  int N = sp.getsize() - 2;
  for (int i = 1; i <= (N); ++i) {
    ans[ask(i)] += sp.tobig(i + 1) - sp.tobig(i);
  }
  ans[0] = 1;
  for (int i = 1; i <= (n); ++i) ans[i] /= 2 * l, ans[0] -= ans[i];
  for (int i = (0); i <= (n); ++i) printf("%.20lf\n", ans[i]);
  return 0;
}
