喜欢 define 见谅
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define ofor(i, a, b) for (int i = a; i < b; i++)
#define cfor(i, a, b) for (int i = a; i <= b; i++)
#define bfor(i, a, b) for (int i = a; i >= b; i--)
#define mset(a, x) memset(a, x, sizeof(a))
#define lowbit(x) ((x) & (-(x)))
int n, m, p[205], d[205], a[205];
struct state {
bool valid; // 是否可行
int last; // 上一个选的是什么
int sum; // P + D
} f[205][25][805]; // f[i][j][x]: 前 i 个,选 j 个,P - D = x - 400
stack<int> st;
int main() {
// ios::sync_with_stdio(0);
int T = 0;
while (cin >> n >> m) {
if (n == 0 and m == 0) break;
T++;
mset(p, 0);
mset(d, 0);
mset(a, 0);
mset(f, 0);
cfor (i, 1, n) {
cin >> p[i] >> d[i];
a[i] = p[i] - d[i];
}
f[0][0][400] = {true, 0, 0};
cfor (i, 1, n) {
cfor (j, 0, m) {
cfor (x, 0, 800) {
state v1 = f[i - 1][j][x]; // 不选
f[i][j][x] = {v1.valid, v1.last, v1.sum};
state v2 = f[i - 1][j - 1][x - a[i]]; // 选
if (j >= 1 and x >= a[i] and v2.valid and v2.sum + p[i] + d[i] >= f[i][j][x].sum)
f[i][j][x] = {true, i, v2.sum + p[i] + d[i]};
}
}
}
int ans = 1e9, pos = -1, maxsum = -1;
cfor (x, 0, 800) {
if (not f[n][m][x].valid) continue;
if (abs(x - 400) < ans or (abs(x - 400) == ans and f[n][m][x].sum >= maxsum))
ans = abs(x - 400), pos = x, maxsum = f[n][m][x].sum;
}
int P = 0, D = 0;
for (int i = n, j = m, x = pos; f[i][j][x].last != 0; x -= a[i], i--, j--) {
i = f[i][j][x].last;
st.push(i);
P += p[i], D += d[i];
}
printf("Jury #%d\nBest jury has value %d for prosecution and value %d for defence:\n", T, P, D);
while (not st.empty()) {
cout << " " << st.top();
st.pop();
}
cout << endl << endl;
}
return 0;
}