#include <iostream>
#include <vector>
using namespace std;

int main() {
    int T;
    cin >> T;
    while (T--) {
        int n, m, c = 0;
        cin >> n >> m;
        vector<int> dp(m + 1, 0), w, v;
        for (int i = 1; i <= n; ++i) {
            int wi, vi;
            cin >> wi >> vi;
            int k = m / wi;
            int t = 1;
            while(k > 0){
                int take = min(k, t);
                w.push_back(take * wi);
                v.push_back(take * vi);
                k -= take;
                t <<= 1;
            }
        }
        for(int i = 0;i < w.size();++i){
            for(int j = m;j >= w[i];--j){
                dp[j] = max(dp[j], dp[j-w[i]] + v[i]);
            }
        }
        cout << dp[m] << endl;
    }
}
// int main() {
//     int T;cin>>T;
//     while(T--){
//         int n, m;cin>>n>>m;
//         vector<int> dp(m + 1, 0);
//         for(int i = 1;i <= n;++i){
//             int w, v;cin>>w>>v;
//             for(int j = w;j <= m;++j){
//                 dp[j] = max(dp[j], dp[j-w] + v);
//             }
//         }
//         cout<<dp[m]<<endl;
//     }
// }
// 64 位输出请用 printf("%lld")