import java.util.*;
public class Main{
static int N;
static int M;
static int[] dp;
static int[] state;
static int ans;
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
N = scan.nextInt();
M = scan.nextInt();
dp = new int[N+1];
state = new int[N+1];
int sum = 0;
for(int i = 1;i<N+1;i++)
{
int w = scan.nextInt();
int u = scan.nextInt();
state[i] = w;
dp[i] = u;
}
dfs(1,0,0);
System.out.println(ans);
}
public static void dfs(int k,int sp,int value)
{
if(k>N+1||sp>M)
{
return;
}
if(k==N+1&&sp<=M)
{
ans = Math.max(ans,value);
return;
}
for(int i =0;i<1;i++)
{
dfs(k+1,sp+state[k],value+dp[k]);
dfs(k+1,sp,value);
}
}
}