#include using namespace std; #define MAX 400 int n, m, a, b, p[MAX]; long long dp[MAX][MAX][MAX], an, id; stack ans; int main() { freopen("cheating.in", "r", stdin); freopen("cheating.out", "w", stdout); cin >> n >> m >> a >> b; for(int i = 1; i <= n; i++)cin >> p[i]; for(int i = 0; i <= n; i++) for(int j = 0; j <= m; j++) for(int k = 0; k <= n; k++)dp[i][j][k] = LLONG_MAX / 100; dp[0][0][0] = 0; for(int i = 1; i <= n; i++) { for(int j = 1; j <= m; j++) { for(int k = 0; k < i; k++) { if(dp[i][j][k] > dp[i - 1][j][k]) { dp[i][j][k] = dp[i - 1][j][k]; } if(dp[i][j][i] > dp[i - 1][j - 1][k] + a * abs(p[i] - p[k])) { dp[i][j][i] = dp[i - 1][j - 1][k] + a * abs(p[i] - p[k]); } } } } an = n; for(int i = 1; i <= n; i++)if(dp[n][m][an] > dp[n][m][i]) { an = i; } id = m; for(int j = n ; j >= 1; j--) {//cout << j << " " << id <<" " << an << " " << dp[j][id][an] << " " << par[j][id][an].q << endl;; if(dp[j][id][an] == dp[j - 1][id][an])continue; for(int t = 0; t < an; t++) { if(dp[j][id][an] == dp[j - 1][id - 1][t] + a * abs(p[an] - p[t])) { ans.push(j); id--; an = t; break; } } } while(ans.empty() != 1) { cout << ans.top() << " "; ans.pop(); } cout << endl; return 0; } /* 10 8 3 4 14 15 12 6 11 8 5 14 9 7 */