/*import java.util.Scanner;
public class test2 {//
public static void main(String args[]) {
Scanner sc=new Scanner(System.in);
int N,M,W[],D[];
N=sc.nextInt();//个数
M=sc.nextInt();//容量
W=new int[N+1];
D=new int[N+1];
for(int i=1;i<=N;i++) {
W[i]=sc.nextInt();
D[i]=sc.nextInt();
}
int dp[][]=new int[M+1][N+1];
for(int i=W[1];i<=M;i++) {
dp[i][0]=D[1];
}
for(int i=1;i<=M;i++) {
for(int j=1;j<=N;j++) {
if(i-W[j]<0) {
dp[i][j]=dp[i][j-1];
}else {
dp[i][j]=Math.max(dp[i][j-1], dp[i-W[j]][j-1]+D[j]);
}
}
}
System.out.println(dp[M][N]);
}
}*/
import java.util.Scanner;
public class test2 {//
public static void main(String args[]) {
Scanner sc=new Scanner(System.in);
int N,M,W[],D[];
N=sc.nextInt();//个数
M=sc.nextInt();//容量
W=new int[N+1];
D=new int[N+1];
for(int i=1;i<=N;i++) {
W[i]=sc.nextInt();
D[i]=sc.nextInt();
}
int dp[]=new int[M+1];
for(int i=1;i<=N;i++) {
for(int j=M;j>=W[i];j--) {
dp[j]=Math.max(dp[j], dp[j-W[i]]+D[i]);
}
}
System.out.println(dp[M]);
}
}
09-22
09-22