#include <iostream>
#define llint long long
#define inf 105000000000000000

using namespace std;

llint N, W;
llint w[105], v[105];
llint dp[105][105][405];

int main(void)
{
	cin >> N >> W;
	for(llint i = 1; i <= N; i++) cin >> w[i] >> v[i];
	
	llint w1 = w[1];
	for(llint i = 1; i <= N; i++) w[i] -= w1;
	
	llint ans = 0;
	for(llint x = 1; x <= N; x++){
		
		for(llint i = 0; i <= x*4; i++) dp[0][0][i] = -inf;
		dp[0][0][0] = 0;
		
		for(llint i = 1; i <= N; i++){
			for(llint j = 0; j <= x; j++){
				for(llint k = 0; k <= x*4; k++){
					dp[i][j][k] = dp[i-1][j][k];
					if(j > 0 && k >= w[i]) dp[i][j][k] = max(dp[i][j][k], dp[i-1][j-1][k-w[i]] + v[i]);
				}
			}
		}
		for(llint i = 0; i <= min(x*4, W - x*w1); i++) ans = max(ans, dp[N][x][i]);
	}
	
	cout << ans << endl;
	return 0;
}