#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream cin("transport.in");
ofstream cout("transport.out");
int n,k;
int vinc[100001];
struct Fiu{
int tot,st,dr,nrc;
};
bool intreg(int sum){
int s=0,cnt=0;
for(int i=0; i<n; i++){
if(s<sum)
s+=vinc[i];
else{
s=vinc[i];
cnt++;
}
}
if(s>=sum)
cnt++;
if(cnt<k)
return false;
return true;
}
bool comp(Fiu a,Fiu b){
if(a.tot==b.tot)
return a.st<b.st;
return a.tot<b.tot;
}
bool comp2(Fiu a,Fiu b){
return a.st<b.st;
}
vector<Fiu>vfin;
int main(){
int s=0,stpoz=0,i=0,cnt=0,sum=0,st=0,dr,mid;
cin>>n>>k;
for(int i=0;i<n;i++){
cin>>vinc[i];
sum+=vinc[i];
}
dr=sum+1;
while(st<dr){
mid=(st+dr+1)/2;
if(intreg(mid)==true)
st=mid;
else
dr=mid-1;
}
cout<<dr<<endl;
dr--;
while(i<n){
if(cnt==k-1){
s=0;
while(i<n){
s+=vinc[i];
i++;
}
}
while(i<n && s+vinc[i]<dr){
s+=vinc[i];
i++;
}
if(i<n){
s+=vinc[i];
i++;
}
cnt++;
vfin.push_back({s,stpoz,i-1});
s=0;
stpoz=i;
}
sort(vfin.begin(),vfin.end(),comp);
for(i=0;i<vfin.size();i++)
vfin[i].nrc=k-i;
sort(vfin.begin(),vfin.end(),comp2);
for(i=0;i<vfin.size();i++)
cout<<vfin[i].nrc<<" "<<vfin[i].dr-vfin[i].st+1<<'\n';
return 0;
}