#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")