#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<set>
#include<vector>
#include<queue>
using namespace std;
long long int bb[20000000],rr[20000000],ll[20000000];
long long int delivery(long long int n, long long int m, long long int l, long long int* b) {
long long int i,minn=9000000000000000000ll,tar;
sort(b, b + n);
for (i = 0;i < n;i++) {
long long int pr = 0;
if (i >= m) pr = rr[i - m];
if (bb[i] <= l / 2) pr += bb[i] * 2; else pr += l;
rr[i] = pr;
}
for (i = n-1;i >= 0;i--) {
long long int pr = 0;
if (i <= n - m) pr = ll[i + m];
if ((l - bb[i]) <= l / 2) pr += (l - bb[i]) * 2; else pr += l;
ll[i] = pr;
}
for (i = 0;i <= n;i++) {
tar = 0;
if (i == 0) tar = ll[0];
else tar = rr[i - 1] + ll[i];
minn = min(minn, tar);
}
return minn;
}
int main() {
long long int n, m, l,i;
scanf("%lld%lld%lld", &n, &m, &l);
for (i = 0;i < n;i++) {
scanf("%lld", &bb[i]);
}
printf("%lld", delivery(n, m, l, bb));
return 0;
}