#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m;
int dp[21][801],path[21][801];
int p[201],d[201],s[201],v[201];
int id[21];
bool select(int j,int k,int i){
while(j>0&&path[j][k]!=i){
k -= v[path[j][k]];
j--;
}
return (j!=0)?true:false;
}
int main(){
int j,k,i,time=1;
while(cin>>n>>m&&n!=0){
for(i=1;i<=n;i++){
cin>>p[i]>>d[i];
s[i] = p[i]+d[i];
v[i] = p[i]-d[i];
}
memset(dp,-1,sizeof(dp));
memset(path,0,sizeof(path));
int fix = m*20;
dp[0][fix] = 0;
for(j=1;j<=m;j++){
for(k=0;k<=2*fix;k++){
if(dp[j-1][k]>=0){
for(i=1;i<=n;i++){
if(!select(j-1,k,i)){
if(dp[j][k+v[i]]<dp[j-1][k]+s[i]){
dp[j][k+v[i]] = dp[j-1][k]+s[i];
path[j][k+v[i]] = i;
}
}
}
}
}
}
for(k=0;k<=2*fix;k++){
if(dp[m][fix-k]>=0||dp[m][fix+k]>=0){
break;
}
}
int div = dp[m][fix-k]>dp[m][fix+k]?fix-k:fix+k;
for(i=0,j=m,k=div;i<m;i++,j--){
id[i] = path[j][k];
k -= v[id[i]];
}
sort(id,id+m);
//Jury #1
//Best jury has value 6 for prosecution and value 4 for defence:
// 2 3
cout<<"Jury #"<<time++<<endl;
cout<<"Best jury has value "<<(dp[m][div]+div-fix)/2<<" for prosecution and value "<<(dp[m][div]-div+fix)/2<<" for defence:"<<endl;
for(i=0;i<m;i++){
cout<<" "<<id[i];
}
cout<<endl<<endl;
}
return 0;
}