#include <bits/stdc++.h>
using namespace std;
const int N=22;
int n, c[N], v[N];
long long ans, S;
void btrack(int idx, long long cost, long long val)
{
if(idx>n){
if(cost<=S) ans=max(ans, val);
return;
}
btrack(idx+1, cost+c[idx], val+v[idx]); //chọn vị trí idx
btrack(idx+1, cost, val); //không chọn vị trí idx
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> n >> S;
for(int i=1;i<=n;++i)
cin >> c[i] >> v[i];
btrack(1, 0, 0);
cout << ans;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTj0yMjsKaW50IG4sIGNbTl0sIHZbTl07CmxvbmcgbG9uZyBhbnMsIFM7Cgp2b2lkIGJ0cmFjayhpbnQgaWR4LCBsb25nIGxvbmcgY29zdCwgbG9uZyBsb25nIHZhbCkKewogICAgaWYoaWR4Pm4pewogICAgICAgIGlmKGNvc3Q8PVMpIGFucz1tYXgoYW5zLCB2YWwpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGJ0cmFjayhpZHgrMSwgY29zdCtjW2lkeF0sIHZhbCt2W2lkeF0pOyAvL2No4buNbiB24buLIHRyw60gaWR4CiAgICBidHJhY2soaWR4KzEsIGNvc3QsIHZhbCk7IC8va2jDtG5nIGNo4buNbiB24buLIHRyw60gaWR4Cn0KCnNpZ25lZCBtYWluKCkKewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKCiAgICBjaW4gPj4gbiA+PiBTOwogICAgZm9yKGludCBpPTE7aTw9bjsrK2kpCiAgICAgICAgY2luID4+IGNbaV0gPj4gdltpXTsKICAgIGJ0cmFjaygxLCAwLCAwKTsKICAgIGNvdXQgPDwgYW5zOwogICAgcmV0dXJuIDA7Cn0K