#include <bits/stdc++.h>
using namespace std;
const int N = 6005;
int n, mx, A, B, top, k;
double x[N], ans[N], tmp;
pair<double, double> q[N * 2];
int main() {
  scanf("%d%d%d%d", &n, &mx, &A, &B);
  for (int i = (int)(1); i <= (int)(n); i++) {
    scanf("%lf", &x[i]);
    if (i == 1) {
      q[++top] = pair<double, double>(1, 2 * (1 - x[i]));
      q[++top] = pair<double, double>(1e18, 2 * (1e18 - x[i]));
      k = 1;
    } else {
      for (int j = (int)(top); j >= (int)(k + 1); j--) q[j + 2] = q[j];
      top += 2;
      k++;
      q[k] = q[k + 1] = pair<double, double>(tmp, 0);
      for (int j = (int)(1); j <= (int)(k); j++) q[j].first += A;
      for (int j = (int)(k + 1); j <= (int)(top); j++) q[j].first += B;
      for (int j = (int)(1); j <= (int)(top); j++)
        q[j].second += 2 * (q[j].first - x[i]);
    }
    if (q[1].second > 0)
      k = 0, tmp = q[1].first;
    else {
      for (k = 1; k <= top; k++)
        if (q[k].second <= 0 && q[k + 1].second > 0) break;
      tmp = q[k].first - q[k].second / (q[k + 1].second - q[k].second) *
                             (q[k + 1].first - q[k].first);
    }
    ans[i] = tmp;
  }
  ans[n] = min(ans[n], 1.0 * mx);
  for (int i = (int)(n); i >= (int)(2); i--)
    ans[i - 1] = max(ans[i] - B, min(ans[i] - A, ans[i - 1]));
  for (int i = (int)(1); i <= (int)(n); i++) printf("%.15lf ", ans[i]);
  double sum = 0;
  puts("");
  for (int i = (int)(1); i <= (int)(n); i++)
    sum += (x[i] - ans[i]) * (x[i] - ans[i]);
  printf("%.15lf\n", sum);
}
