import java.util.Scanner; //有N件物品和一个容积为M的背包。第i件物品的体积w[i] //,价值是d[i]。求解将哪些物品装入背包可使价值总和 //最大。每种物品只有一件,可以选择放或者不放 //(N<=3500,M <= 13000) public class poj3624{ public static void main(String []args){ int w[]=new int[3500]; int d[]=new int[3500]; Scanner sca=new Scanner(System.in); int n=sca.nextInt(); int m=sca.nextInt(); for(int i=1;i<=n;i++){ w[i]=sca.nextInt(); d[i]=sca.nextInt(); } int dp[]=new int[13000]; for (int i=0;i<=n;i++){ if(w[1]<=i) dp[i]=d[1]; else dp[i]=0; } for (int i=2;i<=n;i++){ for (int j=m;j>=w[i];j--){ dp[j]=Math.max(dp[j-w[i]]+d[i],dp[j]); } } System.out.println(dp[m]); sca.close(); } }