#include <bits/stdc++.h>
#define int long long
#define ull unsigned long long
#define db double
#define gc getchar
#define pii pair<int,int>
#define pb push_back
#define mk make_pair
#define fir first
#define sec second
using namespace std;
const int delta = 400;
inline int read() {
int s = 0, f = 1;
char c = getchar();
while (c < '0' || c > '9') {
if (c == '-') f = -1;
c = getchar();
}
while (c >= '0' && c <= '9') {
s = s * 10 + c - 48;
c = getchar();
}
return s * f;
}
int n, m;
int f[405][1005];
int prt_ans[405][205][1005];
int d[405], p[405];
int suma, sumb;
int cnt = 0;
int A[100005];
int tot = 0;
inline void solve(int i, int j, int k) {
if (!j) return;
int in = prt_ans[i][j][k + delta];
solve(in - 1, j - 1, j - (d[in] - p[in]));
A[++ tot] = in;
suma += d[in], sumb += p[in];
}
signed main() {
while (cin >> n >> m && n && m) {
for (int i = 1; i <= n; i ++) d[i] = read(), p[i] = read();
memset(f, 128, sizeof f);
f[0][delta] = 0;
for (int i = 1; i <= n; i ++) {
for (int j = 0; j <= m; j ++) {
for (int k = -400; k <= 400; k ++) {
prt_ans[i][j][k + delta] = prt_ans[i - 1][j][k + delta];
}
}
for (int j = m; j; j --) {
for (int k = -400; k <= 400; k ++) {
if (k - (d[i] - p[i]) < -400 || k - (d[i] - p[i]) > 400) continue;
int nw = f[j][k + delta];
f[j][k + delta] = max(f[j][k + delta], f[j - 1][k + delta - d[i] + p[i]] + d[i] + p[i]);
if (f[j][k + delta] > nw) {
prt_ans[i][j][k + delta] = i;
}
}
}
}
int ans = 400;
for(int i = -400; i <= 400; i++){
if(f[m][i + delta] < 0) continue;
if(abs(i) < abs(ans) || (abs(i) == abs(ans) && f[m][i + delta] > f[m][ans + delta])) ans = i;
}
tot = suma = sumb = 0;
solve(n, m, ans);
printf("Jury #%lld\n", ++cnt);
printf("Best jury has value %lld for prosecution and value %lld for defence:\n", suma, sumb);
for(int i = 1; i <= tot; i++) printf(" %lld", A[i]);
printf("\n\n");
}
return 0;
}