void dfs(int vl, int value)
{
if(vl >= m)
return;
else
{
res = max(res, value);
return;
}
for(int i = 1; i <= n; i ++)
{
if(!st[i])
{
st[i] = true;
dfs(vl + v[i], value + w[i]);
st[i] = false;
}
}
}
int main()
{
cin >> n >> m;
for(int i = 1; i <= n; i ++)
{
cin >> v[i] >> w[i];
}
dfs(0, 0);
cout << res << endl;
}