/*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 Best jury has value %d for prosecution and value %d for defence: ",++kase,sump,sumd); fr(i,1,cnt)printf(" %d",ans[i]);puts(" "); read(n),read(m); } return 0; }