int n, m, t, mt, ans(0x7fffffff); int cnt[maxn], sum[maxn], f[maxn];
inlineintRead() { intx(0); charo(getchar()); while (o < '0' || o > '9') o = getchar(); for (; o >= '0' && o <= '9'; o = getchar()) x = (x << 1) + (x << 3) + (o ^ 48); return x; }
inlineintwait(int l, int r) { return (cnt[r] - cnt[l]) * r - (sum[r] - sum[l]); }
intmain() { n = Read(), m = Read(); for (int i = 1; i <= n; ++i) { mt = max(t = Read(), mt); cnt[t]++, sum[t] += t; } for (int i = 1; i < m + mt; ++i) cnt[i] += cnt[i - 1], sum[i] += sum[i - 1]; for (int i = 0; i < m + mt; ++i) { if (i >= m && cnt[i] == cnt[i - m]) { f[i] = f[i - m]; continue; } f[i] = cnt[i] * i - sum[i]; for (int j = max(i - 2 * m + 1, 0); j <= i - m; ++j) f[i] = min(f[i], f[j] + wait(j, i)); if (i >= mt) ans = min(ans, f[i]); } printf ("%d\n", ans); }