#include <bits/stdc++.h>
using namespace std;
pair<double, double> p[6060 * 2];
double first[6060], ans[6060];
int main() {
  int n, q, a, b;
  cin >> n >> q >> a >> b;
  int m = 0, j = 0;
  double cur;
  for (int i = 1; i <= n; i++) {
    scanf("%lf", first + i);
    if (i == 1) {
      p[1] = make_pair(1.0, 2.0 * (1.0 - first[i]));
      p[2] = make_pair(1e9, 2.0 * (1e9 - first[i]));
      m = 2;
    } else {
      for (int k = m; k >= j + 1; k--) p[k + 2] = p[k];
      m += 2;
      p[j + 1] = p[j + 2] = make_pair(cur, 0);
      for (int k = 1; k <= j + 1; k++) p[k].first += a;
      for (int k = j + 2; k <= m; k++) p[k].first += b;
      for (int k = 1; k <= m; k++) p[k].second += 2.0 * (p[k].first - first[i]);
    }
    if (p[1].second > 0)
      cur = p[1].first, j = 0;
    else {
      for (j = 1; j + 1 <= m; j++)
        if (p[j].second <= 0 && p[j + 1].second >= 0) break;
      cur = (p[j + 1].first - p[j].first) / (p[j].second - p[j + 1].second) *
                p[j].second +
            p[j].first;
    }
    ans[i] = cur;
  }
  ans[n] = min(ans[n], (double)q);
  for (int i = n - 1; i >= 1; i--) {
    if (ans[i] + b < ans[i + 1]) ans[i] = ans[i + 1] - b;
    if (ans[i] + a > ans[i + 1]) ans[i] = ans[i + 1] - a;
  }
  double res = 0;
  for (int i = 1; i <= n; i++) res += (ans[i] - first[i]) * (ans[i] - first[i]);
  for (int i = 1; i <= n; i++) printf("%.8lf ", ans[i]);
  puts("");
  printf("%.8lf\n", res);
  return 0;
}
