#include "boxes.h"
#include <bits/stdc++.h>
#define ALL(x) x.begin(),x.end()
using namespace std;
typedef long long ll;
ll dist(ll ini,ll fin,ll L){
return min(abs(fin-ini),min(ini,fin)+L-max(ini,fin));
}
ll delivery(int N, int K, int L, int p[]){
vector<ll> nums(p,p+N);
sort(ALL(nums));
reverse(ALL(nums));
while(!nums.empty() && nums.back()==0)nums.pop_back();
reverse(ALL(nums));
if(nums.empty())return 0;
N=nums.size();
vector<ll> p1(N),p2(N);
//no volver
// k=4
//0,1,2,3,4,5,6,7,8,9,10
// N-K=10-4=6,N-2*K
p1[0]=dist(nums[0],0,L);
int con=K;
con--;
for(int i=1;i<N;i++){
p1[i]+=p1[i-1];
if(con==0){
//recargar primero
p1[i]+=dist(nums[i-1],0,L);
p1[i]+=dist(nums[i],0,L);
con=K-1;
continue;
}
if(dist(nums[i-1],nums[i],L)!=nums[i]-nums[i-1]){
con=K;
}
p1[i]+=dist(nums[i-1],nums[i],L);
con--;
}
p2[N-1]=dist(nums[N-1],0,L);
con=K;
con--;
for(int i=N-2;i>=0;i--){
p2[i]+=p2[i+1];
if(con==0){
//recargar primero
p2[i]+=dist(nums[i+1],0,L);
p2[i]+=dist(nums[i],0,L);
con=K-1;
continue;
}
if(dist(nums[i+1],nums[i],L)!=nums[i+1]-nums[i]){
con=K;
}
p2[i]+=dist(nums[i+1],nums[i],L);
con--;
}
for(int i=0;i<N;i++){
cout << nums[i] << ' ';
}
cout << endl;
for(int i=0;i<N;i++){
cout << p1[i] << ' ';
}
cout << endl;
for(int i=0;i<N;i++){
cout << p2[i] << ' ';
}
cout << endl;
ll res=1e18;
for(int i=0;i<N-1;i++){
res=min(res,p1[i]+p2[i+1]+dist(nums[i],0,L)+dist(nums[i+1],0,L));
}
return min({res,p1[N-1]+dist(nums[N-1],0,L),p2[0]+dist(nums[0],0,L)});
}