#include <bits/stdc++.h>
using namespace std;
vector<pair<long long ,long long>>vi;
long long n , w ;
long long mem[105][100005];
bool vis[105][100005];
long long sol(int indx ,int ca){
	if(indx==n)
		return 0;

	long long ret = ~mem[indx][ca];
	if(vis[indx][ca])return ret;
	vis[indx][ca] = true;
	long long fch = sol(indx + 1 , ca);
	long long sch = 0;
	if(ca - vi[indx].first >=0)
		sch = sol(indx + 1 , ca -vi[indx].first ) + vi[indx].second;
	return ret = max(fch , sch);
}
int main()
{
	cin>>n>>w;
	vi.resize(n);
	for(int i = 0; i < n ;i++){
		long long x , y;
		cin>>vi[i].first>>vi[i].second;
	}
	cout<<sol(0,w);
	return 0;
}

