#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:64000000")
using namespace std;
const double pi = 3.1415926535897932384626433832795;
double eps = 1e-9;
char ch[1 << 20];
inline string gs() {
  scanf("%s", ch);
  return string(ch);
}
inline string gl() {
  gets(ch);
  return string(ch);
}
inline int gi() {
  int x;
  scanf("%d", &x);
  return x;
}
void error(bool x) {
  if (x) {
    fprintf(stderr, "ERROR\n");
    int ttt = 0;
    cout << 7 / ttt;
  }
}
template <class T>
T gcd(T a, T b) {
  return (!a) ? b : gcd(b % a, a);
}
int mod = 1000000007;
inline int ADD(int a, int b) { return (a + b >= mod) ? a + b - mod : a + b; }
inline int SUB(int a, int b) { return (a - b < 0) ? a - b + mod : a - b; }
inline int MUL(int a, int b) { return 1ll * a * b % mod; }
inline int POW(int a, int n) {
  int r = 1;
  while (n) {
    if (n & 1) r = MUL(r, a);
    n >>= 1;
    a = MUL(a, a);
  }
  return r;
}
const int MATRIX_SIZE = 11;
typedef int matrix[MATRIX_SIZE][MATRIX_SIZE];
void MMUL(matrix &a, matrix &b) {
  matrix c;
  for (int i = (0), _b(MATRIX_SIZE); i < _b; ++i)
    for (int j = (0), _b(MATRIX_SIZE); j < _b; ++j) c[i][j] = 0;
  for (int i = (0), _b(MATRIX_SIZE); i < _b; ++i)
    for (int j = (0), _b(MATRIX_SIZE); j < _b; ++j) {
      for (int k = (0), _b(MATRIX_SIZE); k < _b; ++k)
        c[i][j] = ADD(c[i][j], MUL(a[i][k], b[k][j]));
    }
  for (int i = (0), _b(MATRIX_SIZE); i < _b; ++i)
    for (int j = (0), _b(MATRIX_SIZE); j < _b; ++j) a[i][j] = c[i][j];
}
int main() {
  int n = gi();
  int l = gi();
  int v1 = gi();
  int v2 = gi();
  double t = (double)l / (double)(v1 + v2);
  double S = l - t * (double)v1;
  set<int> Q;
  vector<int> A;
  for (int i = (0), _b(n); i < _b; ++i) A.push_back(gi());
  sort(A.begin(), A.end());
  for (int i = (A.size()) - 1, _b(0); i >= _b; --i) A[i] -= A[0];
  vector<pair<double, int> > W;
  for (int i = (0), _b(n); i < _b; ++i) {
    double x2 = A[i];
    double x1 = A[i] - S;
    if (x1 < 0) {
      W.push_back(make_pair(x1 + 2.0 * l, +1));
      W.push_back(make_pair(2.0 * l, -1));
      W.push_back(make_pair(0, +1));
      W.push_back(make_pair(x2, -1));
    } else {
      W.push_back(make_pair(x1, +1));
      W.push_back(make_pair(x2, -1));
    }
  }
  sort(W.begin(), W.end());
  vector<double> R(n + 1, 0.0);
  int sum = W[0].second;
  for (int i = (1), _b(W.size()); i < _b; ++i) {
    double dx = W[i].first - W[i - 1].first;
    if (sum > 0) {
      R[sum] += dx;
    }
    sum += W[i].second;
  }
  double len = 2.0 * l;
  for (int i = (1), _b(n + 1); i < _b; ++i) len -= R[i];
  R[0] = len;
  for (int i = (0), _b(n + 1); i < _b; ++i) R[i] /= (2.0 * l);
  for (int i = (0), _b(n + 1); i < _b; ++i) printf("%.20lf\n", R[i]);
  return 0;
}
