#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e5 + 10;
int n, k, t, a[N], rt, sz, lsum, rsum, ans;
struct tree
{
int fa, son[2], siz, sum, num, key;
void clear(){
fa = son[0] = son[1] = siz = sum = num = key;
}
}tr[N];
inline bool loc(int x){return tr[tr[x].fa].son[1] == x;}
inline void upd(int x)
{
if(!x)return;
tr[x].siz = tr[x].num;
tr[x].sum = tr[x].num * tr[x].key;
if(tr[x].son[0])tr[x].siz += tr[tr[x].son[0]].siz, tr[x].sum += tr[tr[x].son[0]].sum;
if(tr[x].son[1])tr[x].siz += tr[tr[x].son[1]].siz, tr[x].sum += tr[tr[x].son[1]].sum;
}
inline void rot(int x)
{
int bb = tr[x].fa, yy = tr[bb].fa, fl = loc(x);
tr[bb].son[fl] = tr[x].son[fl xor 1];
tr[tr[bb].son[fl]].fa = bb;
tr[x].son[fl xor 1] = bb;
tr[bb].fa = x;
tr[x].fa = yy;
if(yy)tr[yy].son[tr[yy].son[1] == bb] = x;
upd(bb); upd(x);
}
inline void splay(int x)
{
for(int bb; bb = tr[x].fa; rot(x))if(tr[bb].fa)rot(loc(x) == loc(bb) ? bb : x);
rt = x;
}
inline void find(int x)
{
if(!rt)return;
int r = rt;
while(tr[r].son[x > tr[r].key] and tr[r].key != x)r = tr[r].son[x > tr[r].key];
splay(r);
}
inline int pre()
{
int x = tr[rt].son[0];
while(tr[x].son[1])x = tr[x].son[1];
return x;
}
inline void ins(int x)
{
if(!rt)
{
tr[++sz].fa = tr[sz].son[0] = tr[sz].son[1] = 0;
tr[sz].siz = tr[sz].num = 1;
tr[sz].key = tr[sz].sum = x;
rt = sz;
return;
}
int u = rt, bb = 0;
while(true)
{
if(x == tr[u].key)
{
tr[u].num++;
tr[u].sum += tr[u].key;
upd(u); upd(bb); splay(u);
return;
}
bb = u; u = tr[u].son[x > tr[u].key];
if(!u)
{
tr[++sz].son[0] = tr[sz].son[1] = 0;
tr[sz].siz = tr[sz].num = 1;
tr[sz].key = tr[sz].sum = x;
tr[sz].fa = bb; tr[bb].son[x > tr[bb].key] = sz;
upd(bb);
splay(sz);
return;
}
}
}
inline void del(int x)
{
find(x);
if(tr[rt].num > 1)
{
tr[rt].num--;
tr[rt].sum -= tr[rt].key;
upd(rt);
return;
}
if(!tr[rt].son[0] and !tr[rt].son[1])
{
tr[rt].clear(); rt = 0;
return;
}
if(!tr[rt].son[0])
{
int r = rt;
rt = tr[rt].son[1];
tr[rt].fa = 0;
tr[r].clear();
return;
}
if(!tr[rt].son[1])
{
int r = rt;
rt = tr[rt].son[0];
tr[rt].fa = 0;
tr[r].clear();
return;
}
int r = rt, pr = pre();
splay(pr);
tr[rt].son[1] = tr[r].son[1];
tr[tr[r].son[1]].fa = rt;
tr[r].clear();
upd(rt);
}
inline int kth(int x)
{
int r = rt;
while(1)
{
if(tr[r].son[0] and x <= tr[tr[r].son[0]].siz)
{
rsum += tr[r].key * tr[r].num + tr[tr[r].son[1]].sum;
r = tr[r].son[0];
}
else if(x > tr[tr[r].son[0]].siz + tr[r].num)
{
lsum += tr[r].key * tr[r].num + tr[tr[r].son[0]].sum;
x -= tr[tr[r].son[0]].siz + tr[r].num;
r = tr[r].son[1];
}
else
{
lsum += tr[tr[r].son[0]].sum + tr[r].key * (x - tr[tr[r].son[0]].siz - 1);
rsum += tr[tr[r].son[1]].sum + tr[r].key * (tr[tr[r].son[0]].siz - x + tr[r].num);
return tr[r].key;
}
}
}
signed main()
{
cin >> n >> k;
for(int i = 1; i <= n; i++)scanf("%lld", &a[i]);
t = k + 1 >> 1;
for(int i = 1; i <= k; i++)ins(a[i]);
int l = 1, r = k;
lsum = rsum = 0;
int mid = kth(t);
ans = (2 * t - 1 - k) * mid - lsum + rsum;
for(int i = k + 1; i <= n; i++)
{
ins(a[i]); del(a[i - k]);
lsum = rsum = 0;
int midd = kth(t); int anss = (2 * t - 1 - k) * midd - lsum + rsum;
if(anss < ans)ans = anss, mid = midd, l = i - k + 1, r = i;
}
cout << ans;
for(int i = 1; i <= n; i++)printf("\n%lld", i >= l and i <= r ? mid : a[i]);
return 0;
}