#include <bits/stdc++.h>
using namespace std;
unsigned long long n,m;
unsigned long long maxn=0;
unsigned long long l,r,mid;
unsigned long long a[50001]={};
unsigned long long f[50001]={};
unsigned long long pr;
bool dfs(long long t)
{
unsigned long long l=0,ans=0,b=1;
for (int i=1;i<=m;i++)
{
while (ans<t)
{
if (l>n) return false;
ans+=a[++l];
}
for (int j=b;j<=l;j++)
f[j]=i;
b=l+1;
ans=floor(ans/2);
}
return true;
}
int main()
{
cin>>n>>m;
for (int i=1;i<=n;i++)
{
cin>>a[i];
maxn+=a[i];
}
l=0;r=maxn;
while (l<=r)
{
mid=(l+r)/2;
if (dfs(mid)==true){
l=mid+1;
pr=mid;
}
else r=mid-1;
}
printf("%lld\n",pr);
memset(f,-1,sizeof(f));
dfs(pr);
for (int i=1;i<=n;i++)
{
cout<<min(f[i],m)<<endl;
}
return 0;
}