/*Code by Codercjh*/
/*time 80ms*/
/*status Accepted*/
/*problem jury compromise*/
#include<bits/stdc++.h>
#define fr(i,a,b) for(int i=(a);i<=(b);++i)
#define rf(i,a,b) for(int i=(a);i>=(b);--i)
#define min(a,b) (a<b?a:b)
#define max(a,b) (a>b?a:b)
using namespace std;
typedef long long ll;
template<typename T>
inline void read(T &x){
char c=getchar();T fh=0;bool f=false;
while(!isdigit(c))f|=(c=='-'),c=getchar();
while(isdigit(c))fh=(fh<<1)+(fh<<3)+(c^48),c=getchar();
x=f?-fh:fh;
return;
}
int sump,sumd,cnt,ans[205],d[205][25][805],a[205],b[205],f[25][805],n,m,kase;
void print(int i,int j,int k){
if(j)print(d[i][j][k]-1,j-1,k-(a[d[i][j][k]]-b[d[i][j][k]])),ans[++cnt]=d[i][j][k];
else return;
}
int main(){
read(n),read(m);
while(n&&m){
fr(i,1,n)read(a[i]),read(b[i]);
memset(f,0xcf,sizeof(f));f[0][400]=0;
fr(i,1,n){
fr(j,1,m)
fr(k,0,800)
d[i][j][k]=d[i-1][j][k];
rf(j,m,1)
fr(k,0,800){
if(!(k-(a[i]-b[i])<0||k-(a[i]-b[i])>800)&&f[j][k]<f[j-1][k-(a[i]-b[i])]+a[i]+b[i]){
f[j][k]=f[j-1][k-(a[i]-b[i])]+a[i]+b[i];
d[i][j][k]=i;
}
}
}
int ansi=1e9;
fr(i,0,400){
if(f[m][400+i]>=0&&f[m][400-i]<=f[m][400+i]){
ansi=400+i;
break;
}
else
if(f[m][400-i]>=0){
ansi=400-i;
break;
}
}
sump=sumd=cnt=0;
print(n,m,ansi);
fr(i,1,cnt)sump+=a[ans[i]],sumd+=b[ans[i]];
printf("Jury #%d\nBest jury has value %d for prosecution and value %d for defence:\n",++kase,sump,sumd);
fr(i,1,cnt)printf(" %d",ans[i]);puts("\n");
read(n),read(m);
}
return 0;
}