#include<bits/stdc++.h>
using namespace std;
const long long MaxN = 1e5 + 5;
long long n, W; // n: số loại đồ 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[i]; j <= W; j++)
{
dp[j] = max(dp[j], dp[j - w[i]] + v[i]);
}
}
cout << dp[W];
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGxvbmcgbG9uZyBNYXhOID0gMWU1ICsgNTsKCmxvbmcgbG9uZyBuLCBXOyAgICAgICAgICAvLyBuOiBz4buRIGxv4bqhaSDEkeG7kyB24bqtdCwgVzogc+G7qWMgY2jhu6lhIHThu5FpIMSRYSBj4bunYSBiYWxvCmxvbmcgbG9uZyB3W01heE5dOyAgICAgICAgLy8gd1tpXToga2jhu5FpIGzGsOG7o25nIGPhu6dhIMSR4buTIHbhuq10IGkKbG9uZyBsb25nIHZbTWF4Tl07ICAgICAgICAvLyB2W2ldOiBnacOhIHRy4buLIGPhu6dhIMSR4buTIHbhuq10IGkKbG9uZyBsb25nIGRwW01heE5dOyAgICAgICAvLyBkcFtqXTogZ2nDoSB0cuG7iyBs4bubbiBuaOG6pXQgxJHhuqF0IMSRxrDhu6NjIHbhu5tpIHPhu6ljIGNo4bupYSBqCgppbnQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOwoKICAgIGNpbiA+PiBuID4+IFc7CgogICAgZm9yKGxvbmcgbG9uZyBpID0gMTsgaSA8PSBuOyBpKyspCiAgICB7CiAgICAgICAgY2luID4+IHdbaV0gPj4gdltpXTsKICAgIH0KCiAgICBmb3IobG9uZyBsb25nIGkgPSAxOyBpIDw9IG47IGkrKykKICAgIHsKICAgICAgICBmb3IobG9uZyBsb25nIGogPSB3W2ldOyBqIDw9IFc7IGorKykKICAgICAgICB7CiAgICAgICAgICAgIGRwW2pdID0gbWF4KGRwW2pdLCBkcFtqIC0gd1tpXV0gKyB2W2ldKTsKICAgICAgICB9CiAgICB9CgogICAgY291dCA8PCBkcFtXXTsKfQ==