import java.io.*;
import java.util.*;
class Solution {
static int[][] ham;
static int cal;
static int N, max;
static boolean[] isSelected;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
for (int test_case = 1; test_case <= T; test_case++) {
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
cal = Integer.parseInt(st.nextToken());
max = Integer.MIN_VALUE;
ham = new int[N][];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
ham[i] = new int[] { Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()) };
}
isSelected = new boolean[N];
generateSubset(0, cal);
sb.append("#").append(test_case).append(" ").append(max).append("\n");
}
System.out.println(sb);
}
private static void generateSubset(int cnt, int cal) {
if (cnt == N) {
int sum = 0;
int cal_sum = 0;
int score_sum = 0;
for (int i = 0; i < N; i++) {
if (isSelected[i]) {
cal_sum += ham[i][1];
score_sum += ham[i][0];
}
}
if (cal_sum <= cal) {
if (score_sum > max)
max = score_sum;
}
return;
}
isSelected[cnt] = true;
generateSubset(cnt + 1, cal);
isSelected[cnt] = false;
generateSubset(cnt + 1, cal);
}
}