#include <bits/stdc++.h>
#include "books.h"
using namespace std;
typedef long long ll;
const ll SIZE = 100100;
ll value[SIZE];
ll do_skim(ll x){
if(!value[x]) value[x] = skim(x);
return value[x];
}
ll find_a_idx(ll n, ll a){
ll lo = 1, hi = n+1;
while(lo < hi){
ll mid = (lo + hi) / 2;
if(do_skim(mid) >= a) hi = mid;
else lo = mid+1;
}
return lo;
}
ll max_cost(ll x, ll n){
if(n == 0) return 0;
return x*(x+1) / 2 - (x-n)*(x-n+1) / 2;
}
ll subarray_sum(ll i, ll j, ll a){
ll sum = 0;
for(ll t = j; t >= i; t--){
sum += do_skim(t);
if(sum > 2*a || (sum == 2*a && t > i)) return 2*a+1;
if(sum + max_cost(do_skim(t)-1, t-i) < a) return a-1;
}
return sum;
}
ll find_range(ll n, ll k, ll a){
ll lo = k, hi = n;
while(lo < hi){
ll mid = (lo + hi)/2, sum = subarray_sum(mid-k+1, mid, a);
if(sum >= a && sum <= 2*a) return mid;
if(sum > 2*a) hi = mid-1;
else if(sum < a) lo = mid+1;
}
return -1;
}
void solve(int N, int K, long long A, int S) {
ll n = N, k = K, a = A, s = S;
ll a_idx = find_a_idx(n, a);
if(a_idx != n+1){
ll a_sum = do_skim(a_idx);
for(ll i = k-1; a_sum <= 2*a && i > 0; i--){
a_sum += do_skim(i);
}
if(a_sum <= 2*a){
vector<int> ans = {(int)a_idx};
for(ll i = 1; i < k; i++) ans.push_back(i);
answer(ans);
}
}
ll a_over_k_idx = find_a_idx(n, (a + (a % k)) / k);
a_over_k_idx = max(a_over_k_idx, k);
for(ll i = a_over_k_idx - k + 1; i < a_over_k_idx; i++){
ll sum = subarray_sum(i, i+k-1, a);
if(sum >= a && sum <= 2*a) {
vector<int> ans;
for(ll j = i; j <= i+k-1; j++) ans.push_back(j);
return answer(ans);
}
}
impossible();
}