#include "boxes.h"
#include<bits/stdc++.h>
#define int long long
#define vi vector<int>
#define pii pair<int,int>
#define pb push_back
#define mp make_pair
#define eb emplace_back
#define f0r(i,n) for(int i = 0; i < n; i++)
#define FOR(i,k,n) for(int i = k; i < n; i++)
#define dout(x) cout<<x<<' '<<#x<<endl
#define dout2(x,y) cout<<x<<' '<<#x<<' '<<y<<' '<<#y<<endl
#define vout(v) cout<<#v<<": "; for(auto u : v)cout<<u<<' '; cout<<endl
using namespace std;
int L;
inline int dis(int a, int b){return min(abs(b-a), L - abs(b-a));}
long long delivery(signed N, signed K, signed L, signed pos[]) {
::L=L; if(false){
vi dp(N, 4e18); multiset<int>s; s.insert(dis(0,pos[0]) - pos[0]);
f0r(i,N){
dp[i] = (*s.begin()) + dis(0, pos[i]) + pos[i];
s.insert(dp[i] + dis(0, pos[i+1]) - pos[i+1]);
if(i-K+1 >= 0){
int d = i - K + 1; if(d == 0)s.erase(s.find(dis(0,pos[d]) - pos[d])); else s.erase(s.find(dp[d-1] + dis(0,pos[d]) - pos[d]));
}
} return dp[N-1];
}
else{
vi f(N); int c1 = 0, c2 = 0; f0r(i,N)if(pos[i] <= L/2){
if(i - K >= 0)f[i] = f[i-K] + pos[i] * 2LL, c1 = f[i]; else f[i] = pos[i] * 2LL, c1 = f[i];
}
vi g(N); for(int i = N-1; i >= 0; i--)if(pos[i] > L/2){
if(i + K < N)g[i] = g[i+K] + (L - pos[i]) * 2LL, c2 = g[i]; else g[i] = (L - pos[i]) * 2LL, c2 = g[i];
}
int ans = c1 + c2; for(int i = 0; i + K - 1 < N; i++){
int cur = 0; if(pos[i] > L / 2 || pos[i + K - 1] <= L / 2)continue;
if(i > 0)cur += f[i-1]; cur += L; if(i + K < N)cur += g[i + K]; ans = min(ans, cur);
} return ans;
}
}