#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int n,m;
int a[330],b[300];
int f[300][1000];
int pat[300][1000];
int zer,t1,t2;
int icase;
int ans[300];
int i,j,k;
int main()
{
while(scanf("%d%d",&n,&m))
{
icase++;
if(n==0&&m==0) break;
int x,y;
memset(f,-1,sizeof(f));
memset(pat,0,sizeof(pat));
for(i=1 ; i<=n ; i++)
{
scanf("%d%d",&x,&y);
a[i]=x-y;
b[i]=x+y;
}
zer=20*m;//题目中的辩控差为0,对应于程序中的辩控差为m*20
f[0][zer]=0;
//f[j][k]表示选j个人使其辩控差为k时的最大辩控和
for(j=0 ; j<m ; j++)//每次循环选出1个人
{
for(k=0 ; k<=zer*2 ; k++)//枚举辩控差
if(f[j][k]>=0)
{
for(i=1 ; i<=n ; i++)
if(f[j][k]+b[i]>f[j+1][k+a[i]])
{
t1=j;t2=k;
while(t1>0&&pat[t1][t2]!=i)//验证i是否在前面出现过
{
t2-=a[pat[t1][t2]];
t1--;
}
if(t1==0)
{
f[j+1][k+a[i]]=f[j][k]+b[i];
pat[j+1][k+a[i]]=i;
}
}
}
}
i=zer,j=0;
while(f[m][i+j]<0&&f[m][i-j]<0) j++;
if(f[m][i+j]>f[m][i-j]) k=i+j;
else k=i-j;
int ans1=(f[m][k]+k-zer)/2;//(和+差)/2
int ans2=(f[m][k]-(k-zer))/2;//(和-差)/2
printf("Jury #%d
",icase);
printf("Best jury has value %d for prosecution and value %d for defence:
",ans1,ans2);
for(i=1 ; i<=m ; i++)
{
ans[i]=pat[m-i+1][k];
k-=a[ans[i]];
}
sort(ans+1,ans+m+1);
for(i=1 ; i<=m ; i++) printf(" %d",ans[i]);
printf("
");
}
return 0;
}