#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void checkMax(T &a, const T &b) {
  if (a < b) a = b;
}
template <class T>
inline void checkMin(T &a, const T &b) {
  if (b < a) a = b;
}
template <class T>
inline std::string toString(const T &n) {
  std::ostringstream out;
  out << n;
  out.flush();
  return out.str();
}
template <class T>
inline T toValue(const std::string &s) {
  T x;
  std::istringstream in(s);
  in >> x;
  return x;
}
bool hasNext() {
  char c;
  if (scanf(" %c", &c) == EOF) return false;
  ungetc(c, stdin);
  return true;
}
int dx[] = {0, 0, -1, 1, -1, 1, -1, 1};
int dy[] = {-1, 1, 0, 0, -1, -1, 1, 1};
std::string dir[] = {"L", "R", "U", "D", "LU", "LD", "RU", "RD"};
int tenPower[10] = {0x1,     0xA,     0x64,     0x3E8,     0x2710,
                    0x186A0, 0xF4240, 0x989680, 0x5F5E100, 0x3B9ACA00};
const int N = 100000 + 128;
int n = 0;
long long a[N + N];
long long l, v1, v2;
double ret[N];
void solve() {
  for (int i = 0; i < (int)(n); ++i) {
    a[i + n] = a[i] + 2 * l;
  }
  a[n + n] = a[0] + 4 * l;
  for (int i = (0); i <= (int)(n); ++i) {
    ret[i] = 0.0;
  }
  double left = a[0], right = a[0] + (double)l / (v1 + v2) * v2;
  int j = 0;
  while (j < n + n) {
    if (right < a[j]) {
      --j;
      break;
    }
    ++j;
  }
  int i = 0;
  while (i < n) {
    double s = a[i + 1] - left;
    double t = a[j + 1] - right;
    if (s < t) {
      ret[j - i] += s;
      left += s;
      right += s;
      ++i;
    } else {
      ret[j - i] += t;
      left += t;
      right += t;
      ++j;
    }
  }
}
void run(const int caseID) {
  cin >> n >> l >> v1 >> v2;
  for (int i = 0; i < (int)(n); ++i) {
    cin >> a[i];
  }
  solve();
  for (int i = (0); i <= (int)(n); ++i) {
    printf("%.10lf\n", ret[i] / (2.0 * l));
  }
}
void runWithCaseT() {
  int caseT;
  scanf("%d", &caseT);
  for (int caseID = 1; caseID <= caseT; ++caseID) {
    run(caseID);
  }
}
void runWithoutCaseT() {
  int caseID = 0;
  while (hasNext()) {
    run(++caseID);
  }
}
int main(int argc, char *argv[]) {
  ;
  runWithoutCaseT();
  return (EXIT_SUCCESS);
}
