#include "boxes.h"
#include <bits/stdc++.h>
#define ALL(x) x.begin(),x.end()
using namespace std;
typedef long long ll;
ll dist(int pos,int L){
return min(pos,L-pos);
}
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));
while(!nums.empty() && nums.back()==L)nums.pop_back();
if(nums.empty())return 0;
N=nums.size();
vector<ll> p1(N+2),p2(N+2);
//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]=nums[0];
for(int i=1;i<N;i++){
p1[i]+=p1[i-1];
if(i%K==0){
// volver de nums[i-1] a 0 y de 0 a nums[i-1];
p1[i]+=2*nums[i-1];
}
p1[i]+=nums[i]-nums[i-1];
}
p2[N-1]=L-nums[N-1];
for(int i=N-2;i>=0;i--){
p2[i]+=p2[i+1];
if((N-i-1)%K==0){
p2[i]+=2*(L-nums[i+1]);
}
p2[i]+=nums[i+1]-nums[i];
}
/*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],L)+dist(nums[i+1],L));
}
return min({res,p1[N-1]+dist(nums[N-1],L),p2[0]+dist(nums[0],L)});
}