#include <bits/stdc++.h>
using namespace std;
int eq(double a, double b) {
  if (fabs(a - b) < 1e-7)
    return 1;
  else
    return 0;
}
struct num {
  double val;
  int ok;
} temp, t1, t2;
int cmp(const num& a, const num& b) { return a.val < b.val; }
vector<num> v, vv;
double seg;
deque<num> DQ;
double cnt[100010];
void ini() {
  int i;
  v.clear();
  for (i = 0; i < 100010; i++) cnt[i] = 0;
  vv.clear();
  while (!DQ.empty()) DQ.pop_back();
}
int main() {
  double v1, v2, l, x, y;
  int n, i;
  while (scanf("%d %lf %lf %lf", &n, &l, &v1, &v2) == 4) {
    ini();
    seg = (v2) / (v1 + v2);
    seg *= l;
    for (i = 0; i < n; i++) {
      scanf("%lf", &x);
      temp.val = x;
      temp.ok = 1;
      v.push_back(temp);
      if ((temp.val) < seg || eq((temp.val), seg)) {
        temp.val += 2 * l;
        v.push_back(temp);
      }
    }
    for (i = 0; i < v.size(); i++) {
      temp = v[i];
      if (temp.val > seg || eq(temp.val, seg)) {
        temp.val -= seg;
        temp.ok = 0;
        vv.push_back(temp);
      }
    }
    for (i = 0; i < vv.size(); i++) v.push_back(vv[i]);
    temp.ok = 0;
    temp.val = 0;
    v.push_back(temp);
    temp.val = 2 * l;
    v.push_back(temp);
    temp.val = 2 * l - seg;
    v.push_back(temp);
    sort(v.begin(), v.end(), cmp);
    int j;
    j = 0;
    int cou = 0;
    for (i = 0; i < v.size() - 1; i++) {
      if (v[i].val == 2 * l) break;
      while (j < v.size() && (v[j].val - v[i].val) < seg ||
             eq((v[j].val - v[i].val), seg)) {
        cou += v[j].ok;
        j++;
      }
      cou -= v[i].ok;
      cnt[cou] += v[i + 1].val - v[i].val;
    }
    for (i = 0; i <= n; i++) {
      printf("%.12lf\n", cnt[i] / (2 * l));
    }
  }
  return 0;
}
