#include "boxes.h"
#include "bits/stdc++.h"
using namespace std;
#define ll long long
const ll INF=1e18;
ll NC;
ll LC;
ll KC;
ll cost(ll a,ll b){
return min(abs(a-b),abs(max(a,b)-(min(a,b)+LC)));
}
ll C(vector<int>per){
ll NN=(ll)per.size();
ll res=0;
for(int i=0;i<NN;i+=KC){
int l=i,r=min(NN-1,i+KC-1);
int cur=0;
for(int j=l;j<=r;j++){
res+=cost(cur,per[j]);
cur=per[j];
}
res+=cost(0,cur);
}
return res;
}
ll delivery(int N,int K,int L,int p[])
{
NC=N;
LC=L;
KC=K;
ll ans=INF;
/*
vector<int>per;
for(int i=0;i<N;i++) per.push_back(p[i]);
sort(per.begin(),per.end());
do{
ans=min(ans,C(per));
}while(next_permutation(per.begin(),per.end()));
*/
vector<int>pos1;
vector<int>pos2;
for(int i=0;i<N;i++) pos1.push_back(p[i]);
for(int i=N-1;i>=0;i--) pos2.push_back(p[i]);
ans=min(ans,C(pos1));
ans=min(ans,C(pos2));
ll cur_cost=C(pos1);
for(int i=0;i<N-1;i++){
if(i/K!=(i+1)/K) continue;
int nxt=0;
if(i+2<=N-1) nxt=p[i+2];
ans=min(ans,cur_cost-cost(p[i],p[i+1])+cost(p[i+1],nxt));
}
return ans;
}