#include <iostream>
#include <unordered_map>
#include <vector>
using namespace std;
int main() {
int a;//几组数据
cin >> a; // 注意 while 处理多个 case
while (a) {
int n, m;
cin >> n >> m;
int w_vec[n+1];//体积数组
int v_vec[n+1];//价值数组
for (int i = 1; i < n + 1; i++) {
cin >> w_vec[i] >> v_vec[i];
}
int dp[n + 1][m + 1];
//1、初始化dp[0][i]
for (int j = 1; j < m + 1; j++) {
dp[0][j] = -1;
}
dp[0][0] = 0;
//2、状态转移
for (int i = 1; i < n + 1; i++) {
for (int j = 0; j <m + 1; j++) {
if (j >= w_vec[i]) {
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - w_vec[i]]+ v_vec[i]);
} else {
dp[i][j] = dp[i - 1][j];
}
}
}
int ans=0;
for(int j=0;j<=m;j++){
ans = max(ans,dp[n][j]);
}
a--;
cout << ans << endl;
}
return 0;
}
// 64 位输出请用 printf("%lld")