#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; vi dp(N, 4e18); multiset<int>s; s.insert(dis(0,pos[0]) - pos[0]);
f0r(i,N){
// for(int j = i; j >= max(0LL, i-K+1); j--){
// if(j == 0)dp[i] = min(dp[i], dis(0, pos[0]) + dis(0, pos[i]) + pos[i] - pos[0]);
// else dp[i] = min(dp[i], dp[j-1] + dis(0, pos[i]) + dis(0, pos[j]) + pos[i] - pos[j]);
// }
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];
}