#include <bits/stdc++.h>
#include "books.h"
using namespace std;
void solve(int N, int K, long long A, int S) {
vector<long long> X(N + 1);
auto get = [&](int i) -> long long {
return X[i] == 0 ? X[i] = skim(i) : X[i];
};
if (get(1) >= A)
impossible();
int l = 1; // X[l] < A
int r = N + 1; // X[r] >= A
while (r > l + 1) {
int m = (l + r) / 2;
long long x = get(m);
if (x < A)
l = m;
else
r = m;
}
if (l < N) {
long long sum = get(l + 1);
vector<int> ans{l + 1};
for (int i = 1; i <= min(K - 1, l); i++) {
sum += get(i);
ans.push_back(i);
}
sort(ans.begin(), ans.end());
if (A <= sum && sum <= 2 * A && int(size(ans)) == K)
answer(ans);
}
set<int> ans;
long long sum = 0;
for (int i = 1; i <= K; i++) {
sum += get(i);
ans.insert(i);
}
for (int lx = K, rx = l; lx >= 0; lx--, rx--) {
if (A <= sum && sum <= 2 * A) {
vector<int> res(ans.begin(), ans.end());
answer(res);
}
sum -= get(lx);
sum += get(rx);
ans.erase(lx);
ans.insert(rx);
}
if (A <= sum && sum <= 2 * A) {
vector<int> res(ans.begin(), ans.end());
answer(res);
}
impossible();
}