#include <bits/stdc++.h>
#include "books.h"
using namespace std;
long long val[100005];
long long query(int x) {
if (val[x] == 0) return val[x] = skim(x);
return val[x];
}
void solve(int N, int K, long long A, int S) {
long long sum = 0;
for (int i = 1; i <= K; i++) sum += query(i);
if (sum > 2 * A) {
impossible();
return;
}
if (sum >= A) {
vector<int> v;
for (int i = 1; i <= K; i++) v.push_back(i);
answer(v);
return;
}
int l = 1, r = N, m = N + 1;
while (l <= r) {
int mid = l + (r-l) / 2;
if (query(mid) >= A) {
m = mid;
r = mid - 1;
} else {
l = mid + 1;
}
}
if (m <= N) {
long long ssum = sum - query(K) + query(m);
if (ssum >= A && ssum <= 2 * A) {
vector<int> v;
for (int i = 1; i < K; i++) v.push_back(i);
v.push_back(m);
answer(v);
return;
}
}
int lim = min(m - 1, N);
vector<int> v;
for (int i = 1; i <= K; i++) v.push_back(i);
for (int i = 0; i < K; i++) {
sum -= query(K - i);
sum += query(lim - i);
v[K-1-i] = lim - i;
if (sum >= A && sum <= 2 * A) {
sort(v.begin(), v.end());
answer(v);
return;
}
if (sum > 2 * A) break;
}
impossible();
}