#include <bits/stdc++.h>
#define T int t;cin>>t;while(t--)
#define fast ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr)
#define ll long long
#define endl '\n'
using namespace std;
const ll N = 1e6 + 6;
ll n, q;
pair<ll, ll> pr[103];
ll dp[103][N];
ll napsake(ll i, ll k, ll sum) {
if (k > q) return 0;
if (i == n) return sum;
if (dp[i][k] != (-1)) return dp[i][k];
ll o1 = (-1);
if (k + pr[i].first <= q) o1 = napsake(i + 1, k + pr[i].first, sum + pr[i].second);
ll o2 = napsake(i + 1, k, sum);
return dp[i][k] = max(o1, o2);
}
void Abady() {
memset(dp, -1, sizeof(dp));
cin >> n >> q;
for (int i = 0; i < n; i++) {
int a, b;
cin >> a >> b;
pr[i] = {a, b};
}
cout << napsake(0, 0, 0);
}
int main() {
fast;
Abady();
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgVCBpbnQgdDtjaW4+PnQ7d2hpbGUodC0tKQojZGVmaW5lIGZhc3QgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7Y2luLnRpZShudWxscHRyKTtjb3V0LnRpZShudWxscHRyKQojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGVuZGwgJ1xuJwp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjb25zdCBsbCBOID0gMWU2ICsgNjsKbGwgbiwgcTsKcGFpcjxsbCwgbGw+IHByWzEwM107CmxsIGRwWzEwM11bTl07CgpsbCBuYXBzYWtlKGxsIGksIGxsIGssIGxsIHN1bSkgewogICAgaWYgKGsgPiBxKSByZXR1cm4gMDsKICAgIGlmIChpID09IG4pIHJldHVybiBzdW07CiAgICBpZiAoZHBbaV1ba10gIT0gKC0xKSkgcmV0dXJuIGRwW2ldW2tdOwogICAgbGwgbzEgPSAoLTEpOwogICAgaWYgKGsgKyBwcltpXS5maXJzdCA8PSBxKSBvMSA9IG5hcHNha2UoaSArIDEsIGsgKyBwcltpXS5maXJzdCwgc3VtICsgcHJbaV0uc2Vjb25kKTsKICAgIGxsIG8yID0gbmFwc2FrZShpICsgMSwgaywgc3VtKTsKICAgIHJldHVybiBkcFtpXVtrXSA9IG1heChvMSwgbzIpOwp9Cgp2b2lkIEFiYWR5KCkgewogICAgbWVtc2V0KGRwLCAtMSwgc2l6ZW9mKGRwKSk7CiAgICBjaW4gPj4gbiA+PiBxOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICBpbnQgYSwgYjsKICAgICAgICBjaW4gPj4gYSA+PiBiOwogICAgICAgIHByW2ldID0ge2EsIGJ9OwogICAgfQogICAgY291dCA8PCBuYXBzYWtlKDAsIDAsIDApOwp9CgppbnQgbWFpbigpIHsKICAgIGZhc3Q7CiAgICBBYmFkeSgpOwp9Cg==