// TLE #include #include #include #include int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int n, t, x, y; std::cin >> n >> t >> x >> y; std::vector d(n); for (auto& e : d) std::cin >> e; std::sort(d.begin(), d.end()); std::vector min_cost(n + 1, n); min_cost[1] = 0; std::vector pd(n, n); for (int i = 0; i < n; ++i) { pd[i] = 0; } for (int k = 2; k <= n; ++k) { std::vector dp(n, n); int min_pref = n; std::deque> min_suff; int m = 0; for (int i = 0; i < n; ++i) { while (d[m] < d[i] - t) { min_pref = std::min(min_pref, pd[m]); ++m; } while (min_suff.size() and min_suff.front().second < m) { min_suff.pop_front(); } dp[i] = std::min(dp[i], min_pref + 1); if (min_suff.size()) dp[i] = std::min(dp[i], min_suff.front().first); while (min_suff.size() and min_suff.back().first >= pd[i]) { min_suff.pop_back(); } min_suff.emplace_back(pd[i], i); min_cost[k] = std::min(min_cost[k], dp[i]); } pd.swap(dp); } for (int k = 1; k <= n; ++k) { if (k != 1) std::cout << ' '; std::cout << 1LL * std::min(x, y) * min_cost[k]; } std::cout << '\n'; }