#include <bits/stdc++.h>
#include "books.h"
//#define int long long
#define ll long long
#define pb push_back
#define fs first
#define sc second
using namespace std;
void solve(int n, int k, long long a, int s){
vector<pair<ll,int>> vec;
ll sum = 0;
for(int i = 1; i <= k; i++){
ll v = skim(i);
vec.pb({v, i});
sum += v;
}
if(sum > 2 * a){
impossible();
return;
}
if(sum >= a){
vector<int> res;
for(auto x : vec) res.pb(x.sc);
answer(res);
return;
}
int l = 1, r = n, pos = n + 1;
while(l <= r){
int mid = (l + r) / 2;
ll v = skim(mid);
if(v >= a) pos = mid, r = mid - 1;
else l = mid + 1;
}
vector<pair<ll,int>> vec1 = vec;
for(int i = max(k + 1, pos - k); i < pos; i++){
if(i <= k) continue;
ll v = skim(i);
vec1.pb({v, i});
}
int m = vec1.size();
for(int i = 0; i + k <= m; i++){
ll s2 = 0;
vector<int> res;
for(int j = i; j < i + k; j++){
s2 += vec1[j].fs;
res.pb(vec1[j].sc);
}
if(s2 >= a and s2 <= 2 * a){
answer(res);
return;
}
}
if(pos != n + 1){
ll s2 = 0;
vector<int> res;
for(int i = 0; i < k - 1; i++){
s2 += vec[i].fs;
res.pb(vec[i].sc);
}
ll v = skim(pos);
s2 += v;
res.pb(pos);
if(s2 >= a && s2 <= 2 * a){
answer(res);
return;
}
}
impossible();
}