import java.io.*;
import java.util.*;
public class POJ3624 {
static int dp[] = new int [12880 + 5]; // 开数组的时候以M 的最大值为准 因为尝试M种可能,然后取最大值
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
Arrays.fill(dp, 0);
for(int i = 1;i <= N;i++) {
st = new StringTokenizer(br.readLine());
int w = Integer.parseInt(st.nextToken());
int val = Integer.parseInt(st.nextToken());
for(int j = M ;j >= 1; j--) {
if(j < w) {
dp[j] = dp[j];
}else {
dp[j] = Math.max(dp[j], dp[j-w] + val);
}
}
}
System.out.println(dp[M]);
}
}