#include #include #include #include #include #define MINN 10000000000 using namespace std; struct Question { int que; long long ans; bool visited = false; Question(int _que, long long _ans) : que(_que), ans(_ans) {} Question() {} }; int N, M, A, Q; vector vec; vector solution; void in() { freopen("cheating.in","r",stdin); cin >> N >> M >> A >> Q; for (int i = 1; i <= N; ++i) { long long ans; cin >> ans; vec.push_back(Question(i, ans)); } } void out() { freopen("cheating.out","w",stdout); for (int i = 0; i < M; ++i) { if (i == M - 1) cout << solution[i].que; else cout << solution[i].que << " "; } cout << '\n'; } void simpleGreedy() { long long currMinn = MINN; int currIndex = 0; for (int i = 0; i < N; ++i) { long long cmp = vec[i].ans * A + vec[i].que * Q; if (cmp < currMinn) { currMinn = cmp; currIndex = i; } } vec[currIndex].visited = true; solution.push_back(vec[currIndex]); Question currQ = solution[0]; for (int i = 1; i < M; ++i) { currMinn = MINN; currIndex = 0; for (int j = 0; j < N; ++j) { if (vec[j].visited) continue; long long cmp = llabs(currQ.ans - vec[j].ans)*A + llabs(currQ.que - vec[j].que)*Q; if (cmp < currMinn) { currMinn = cmp; currIndex = j; } } vec[currIndex].visited = true; currQ = vec[currIndex]; solution.push_back(currQ); } } int main() { in(); simpleGreedy(); out(); // if (N == 1) { // cout << 1; // } return 0; }