import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner=new Scanner(System.in);
		int t=scanner.nextInt();
		while(t-->0) {
			int n=scanner.nextInt();
			int m=scanner.nextInt();
			int w[]=new int[n];//体积
			int v[]=new int[n];//价值
			for (int i = 0; i < v.length; i++) {
				w[i]=scanner.nextInt();
				v[i]=scanner.nextInt();
			}
			int dp[]=new int[m+1];
			for (int i = 0; i < n; i++) {
				for (int j = w[i]; j <= m; j++) {
					dp[j]=Math.max(dp[j], dp[j-w[i]]+v[i]);
				}
			}
			System.out.println(dp[m]);
		}

	}

}

与01背包很像,主要的区别时01背包遍历dp数组时是逆序,而完全背包是正序,正序使得第i件物品可以多次选择