#include<bits/stdc++.h>
using namespace std;
const long long MaxN = 1e5 + 5;
long long n, W; // n: số đồ vật, W: sức chứa tối đa của balo
long long w[MaxN]; // w[i]: khối lượng của đồ vật i
long long v[MaxN]; // v[i]: giá trị của đồ vật i
long long dp[MaxN]; // dp[j]: giá trị lớn nhất đạt được với sức chứa j
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> n >> W;
for(long long i = 1; i <= n; i++)
{
cin >> w[i] >> v[i];
}
for(long long i = 1; i <= n; i++)
{
for(long long j = W; j >= w[i]; j--)
{
dp[j] = max(dp[j], dp[j - w[i]] + v[i]);
}
}
cout << dp[W];
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGxvbmcgbG9uZyBNYXhOID0gMWU1ICsgNTsKCmxvbmcgbG9uZyBuLCBXOyAgICAgICAgICAvLyBuOiBz4buRIMSR4buTIHbhuq10LCBXOiBz4bupYyBjaOG7qWEgdOG7kWkgxJFhIGPhu6dhIGJhbG8KbG9uZyBsb25nIHdbTWF4Tl07ICAgICAgICAvLyB3W2ldOiBraOG7kWkgbMaw4bujbmcgY+G7p2EgxJHhu5MgduG6rXQgaQpsb25nIGxvbmcgdltNYXhOXTsgICAgICAgIC8vIHZbaV06IGdpw6EgdHLhu4sgY+G7p2EgxJHhu5MgduG6rXQgaQpsb25nIGxvbmcgZHBbTWF4Tl07ICAgICAgIC8vIGRwW2pdOiBnacOhIHRy4buLIGzhu5tuIG5o4bqldCDEkeG6oXQgxJHGsOG7o2MgduG7m2kgc+G7qWMgY2jhu6lhIGoKCmludCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7CgogICAgY2luID4+IG4gPj4gVzsKCiAgICBmb3IobG9uZyBsb25nIGkgPSAxOyBpIDw9IG47IGkrKykKICAgIHsKICAgICAgICBjaW4gPj4gd1tpXSA+PiB2W2ldOwogICAgfQoKICAgIGZvcihsb25nIGxvbmcgaSA9IDE7IGkgPD0gbjsgaSsrKQogICAgewogICAgICAgIGZvcihsb25nIGxvbmcgaiA9IFc7IGogPj0gd1tpXTsgai0tKQogICAgICAgIHsKICAgICAgICAgICAgZHBbal0gPSBtYXgoZHBbal0sIGRwW2ogLSB3W2ldXSArIHZbaV0pOwogICAgICAgIH0KICAgIH0KCiAgICBjb3V0IDw8IGRwW1ddOwp9