#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <algorithm>
#include <cmath>
#define MaxN 105
#define MaxL 3000005
#define eps 1e-14
using namespace std;

int N,W,Dif,Ans=0,Wei,V;
vector <pair<int,int>>lista;
int main()
{
	scanf("%d%d",&N,&W);
	for(int i=1;i<=N;i++)
	{
		scanf("%d%d",&Wei,&V);
		int X=lista.size();
		for(int j=0;j<X;j++)
		{
			if(Wei+lista[j].first<=W)
				lista.push_back(make_pair(lista[j].first+Wei,V+lista[j].second));
		}
		if(Wei<=W)lista.push_back(make_pair(Wei,V));
		sort(lista.begin(),lista.end());
		X=-1;
		for(int j=0;j<lista.size();j++)
		{
			if(X==-1||lista[j].first!=lista[X].first)
				lista[++X]=lista[j];
			else lista[X].second=max(lista[X].second,lista[j].second);
			Ans=max(lista[j].second,Ans);
		}
		while(lista.size()>X+1)
			lista.pop_back();
	}
	printf("%d",Ans);
	return 0;
}