#include <bits/stdc++.h>
using namespace std;
int read()
{
	int x=0,f=1;char ch=getchar();
	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
	while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}
int n,W,w[107],v[107];
long long f[107][307];
int main()
{
	n=read(),W=read();
	for (int i=1;i<=n;i++)
	{
		w[i]=read();
		if (i>1) w[i]-=w[1];
		v[i]=read();
	}
	int r=w[1];
	w[1]=0;
	memset(f,0,sizeof(f));
	for (int i=1;i<=n;i++)
	{
		for (int j=i;j;j--)
			for (int k=3*n;k>=0;k--)
			{
				if (k>0) f[j][k]=max(f[j][k],f[j][k-1]);
				if (k>=w[i]&&j>0) f[j][k]=max(f[j][k],f[j-1][k-w[i]]+v[i]);
			}
	}
	long long ans=0;
	for (int i=0;i<=n;i++)
		if (W-1LL*i*r>=0) 
		{
			ans=max(ans,f[i][min(3LL*n,W-1LL*i*r)]);
		}
	cout << ans << endl;
	return 0;
}
