#include <iostream>
#include<cstring>
using namespace std;
int dp[1005][1005];
int v[1005] , w[1005];
int main() {
int n;
cin >> n;
int k , m;
while(n--){
memset(dp , 0 , sizeof(dp));
cin >> k >> m;
for(int i = 1;i<=k;i++)
cin >> v[i] >> w[i];
for(int i = 1;i<=k;i++){
for(int j = 0; j <= m;j++){
if(j >= v[i]){
dp[i][j] = max(dp[i - 1][j],dp[i][j-v[i]] + w[i]);
}else{
dp[i][j] = max(dp[i - 1][j],dp[i][j]);
}
}
}
// for(int i = 1;i<=k;i++){
// for(int j = 0; j <= m;j++){
// cout << dp[i][j] << " ";
// }
// cout << endl;
// }
cout << dp[k][m] << endl;
}
return 0;
}
// 64 位输出请用 printf("%lld")