#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int tot,root;
int son[N][2],fa[N];
int val[N],cnt[N],size[N];
long long sum[N];
int n,k;
int a[N],l,r,t;
long long ans=0x3f3f3f3f3f3f3f3f;
void update(int x){
size[x]=size[son[x][0]]+size[son[x][1]]+cnt[x];
sum[x]=sum[son[x][0]]+sum[son[x][1]]+1ll*val[x]*cnt[x];
}
int get(int x){
return x==son[fa[x]][1];
}
void clear(int x){
son[x][0]=son[x][1]=fa[x]=val[x]=cnt[x]=size[x]=sum[x]=0;
}
void rotate(int x){
int y=fa[x],z=fa[y],k=get(x);
son[y][k]=son[x][k^1];
if(son[x][k^1])
fa[son[x][k^1]]=y;
son[x][k^1]=y;
fa[y]=x;
fa[x]=z;
if(z)
son[z][y==son[z][1]]=x;
update(y);
update(x);
}
void splay(int x){
int y=fa[x];
while(y){
if(fa[y])
rotate(get(x)==get(y)?y:x);
rotate(x);
y=fa[x];
}
root=x;
}
void insert(int v){
if(!root){
tot++;
val[tot]=v;
cnt[tot]=1;
root=tot;
update(tot);
return;
}
int cur=root,x=0;
while(true){
if(val[cur]==v){
cnt[cur]++;
update(cur);
if(x)update(x);
splay(cur);
break;
}
x=cur;
cur=son[cur][val[cur]<v];
if(!cur){
tot++;
fa[tot]=x;
son[x][val[x]<v]=tot;
val[tot]=v;
cnt[tot]=1;
update(tot);
update(x);
splay(tot);
break;
}
}
}
int get_rank(int v){
int ans=0,cur=root;
while(cur){
if(v<val[cur]){
cur=son[cur][0];
}else{
ans+=size[son[cur][0]];
if(val[cur]==v){
splay(cur);
return ans+1;
}
ans+=cnt[cur];
cur=son[cur][1];
}
}
return ans+1;
}
int get_num(int rank){
int cur=root;
while(true){
if(son[cur][0]&&rank<=size[son[cur][0]]){
cur=son[cur][0];
}else{
rank-=size[son[cur][0]]+cnt[cur];
if(rank<=0){
splay(cur);
return val[cur];
}
cur=son[cur][1];
}
}
}
int pre(){
int cur=son[root][0];
if(!cur)return root;
while(son[cur][1])
cur=son[cur][1];
splay(cur);
return cur;
}
void erase(int v){
get_rank(v);
if(cnt[root]>1){
cnt[root]--;
update(root);
return;
}
if(!son[root][0]&&!son[root][1]){
clear(root);
root=0;
return;
}
if(!son[root][0]){
int cur=root;
root=son[root][1];
fa[root]=0;
clear(cur);
return;
}
if(!son[root][1]){
int cur=root;
root=son[root][0];
fa[root]=0;
clear(cur);
return;
}
int cur=root;
int x=pre();
fa[son[cur][1]]=x;
son[x][1]=son[cur][1];
clear(cur);
update(root);
}
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=k;i++)
insert(a[i]);
for(int i=1;i<=n-k+1;i++){
int x=get_num(k+1>>1);
int ls=son[root][0],rs=son[root][1];
if(ans>1ll*x*(cnt[ls]-cnt[rs])-sum[ls]+sum[rs]){
ans=1ll*x*(cnt[ls]-cnt[rs])-sum[ls]+sum[rs];
l=i;r=i+k-1;
t=x;
}
if(i==n-k+1)continue;
erase(a[i]);
insert(a[i+k]);
}
cout<<ans<<'\n';
for(int i=1;i<=n;i++){
if(l<=i&&i<=r)cout<<t;
else cout<<a[i];
cout<<'\n';
}
return 0;
}