#include<bits/stdc++.h>
using namespace std;
long long n,k;
long long a[100001];
struct NODE {
long long v;
long long key;
long long sum;
long long size;
long long l;
long long r;
} node[100001];
long long cnt,rot;
void up(long long now) {
node[now].size=1+node[node[now].l].size+node[node[now].r].size;
node[now].sum=node[node[now].l].sum+node[node[now].r].sum+node[now].v;
}
void split(long long rot,long long k,long long &r1,long long &r2) {
if(rot==0) {
r1=r2=0;
return ;
}
if(node[rot].v<=k) {
r1=rot;
split(node[r1].r,k,node[r1].r,r2);
}else {
r2=rot;
split(node[r2].l,k,r1,node[r2].l);
}
up(rot);
}
long long merge(long long r1,long long r2) {
if(!r1||!r2) return r1+r2;
if(node[r1].key<node[r2].key) {
node[r1].r=merge(node[r1].r,r2);
up(r1);
return r1;
} else {
node[r2].l=merge(r1,node[r2].l);
up(r2);
return r2;
}
}
void insert(long long x) {
node[++cnt].v=x;
node[cnt].key=rand();
node[cnt].sum=0;
node[cnt].l=node[cnt].r=0;
node[cnt].size=1;
long long r1=0,r2=0;
split(rot,x,r1,r2);
r1=merge(r1,cnt);
rot=merge(r1,r2);
}
void del(long long x) {
long long r1=0,r2=0,r3=0,r4=0;
split(rot,x,r1,r2); //r1<=x,r2>x
split(r1,x-1,r3,r4);//r3<x,r4=x;
r4=merge(node[r4].l,node[r4].r);
rot=merge(merge(r3,r4),r2);
}
long long knum(long long now,long long k) {
if(node[node[now].l].size+1==k) {
return now;
}
if(node[node[now].l].size<k) {
return knum(node[now].r,k-node[node[now].l].size-1);
}else {
return knum(node[now].l,k);
}
}
int main() {
cin>>n>>k;
for(long long i=1;i<=n;i++) {
cin>>a[i];
}
long long l=1,r=k,ans=1000000000,ansl=0,ansr=0,ansmid=0;
for(long long i=l;i<=r;i++) insert(a[i]);
long long mid_num=(k-1)/2+1;
while(r!=n+1) {
long long mid=knum(rot,mid_num);
long long r1=0,r2=0,r3=0,r4=0;
split(rot,node[mid].v,r1,r2);
split(r1,node[mid].v-1,r3,r4);
//cout<<node[r3].size<<" "<<node[r3].sum<<" "<<node[r2].size<<" "<<node[r2].sum<<" "<<node[mid].v<<endl;
long long tot=node[mid].v*node[r3].size-node[r3].sum+node[r2].sum-node[mid].v*node[r2].size;
if(tot<ans) {
ans=tot;
ansl=l,ansr=r,ansmid=node[mid].v;
}
long long rot=merge(merge(r3,r4),r2);
del(a[l]);
l++;
r++;
if(r>n) break;
insert(a[r]);
}
cout<<ans<<endl;
//cout<<ans<<endl<<ansl<<" "<<ansr<<" "<<ansmid<<endl;
for(long long i=1;i<=n;i++) {
if(i>=ansl&&i<=ansr) {
cout<<ansmid<<endl;
}else
cout<<a[i]<<endl;
}
return 0;
}