#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e4 + 10;
pair<double, double> dp[MAXN * 2];
int n, cp, tot;
double q, a, b, zp, dat[MAXN], res[MAXN], sum;
int main() {
  scanf("%d%lf%lf%lf", &n, &q, &a, &b);
  for (int i = 1; i <= n; i++) scanf("%lf", &dat[i]);
  dp[++tot] = pair<double, double>(1, 2 * (1 - dat[1]));
  dp[++tot] = pair<double, double>(q + 1, 2 * (q + 1 - dat[1]));
  res[1] = zp = dat[1];
  cp = 1;
  for (int i = 2; i <= n; i++) {
    for (int j = tot; j > cp; j--) dp[j + 2] = dp[j];
    tot += 2;
    dp[cp + 1] = pair<double, double>(zp + a, 0);
    dp[cp + 2] = pair<double, double>(zp + b, 0);
    for (int j = 1; j <= cp; j++) dp[j].first += a;
    for (int j = cp + 3; j <= tot; j++) dp[j].first += b;
    for (int j = 1; j <= tot; j++) dp[j].second += 2 * (dp[j].first - dat[i]);
    if (dp[1].second >= 0)
      cp = 0, zp = dp[1].first;
    else {
      for (cp = 1; cp < tot; cp++)
        if (dp[cp].second <= 0 && dp[cp + 1].second > 0) break;
      zp = dp[cp].first - dp[cp].second * (dp[cp + 1].first - dp[cp].first) /
                              (dp[cp + 1].second - dp[cp].second);
    }
    res[i] = min(zp, q);
  }
  for (int i = n - 1; i; i--)
    if (res[i] + a > res[i + 1])
      res[i] = res[i + 1] - a;
    else if (res[i] + b < res[i + 1])
      res[i] = res[i + 1] - b;
  for (int i = 1; i <= n; i++)
    printf("%.6lf ", res[i]), sum += (res[i] - dat[i]) * (res[i] - dat[i]);
  printf("\n%.6lf", sum);
  return 0;
}
