#include <bits/stdc++.h>
#define N 101
using namespace std;
typedef long long ll;
int n,W;
typedef pair<ll,ll> P;
vector<ll> A[4];
ll w;

unordered_map<ll,ll> dp[101];

ll dfs(int pos,ll cost){
  if(pos == -1) return 0;
  if(dp[pos].count(cost)) return dp[pos][cost];
  ll sumv=0,sumw=cost;
  ll res =  dfs(pos-1,cost);
  for(int i=0;i<A[pos].size();i++){
    sumv+=A[pos][i];
    sumw+=w+pos;
    if(sumw<=W) res=max(res,sumv+dfs(pos-1,sumw));
  }
    return res;
  }

int main(){
  cin>>n>>W;  
  int v;
  cin>>w>>v;
  A[0].push_back(v);

  for(int i=0,a,v;i<n-1;i++){
    cin>>a>>v;
    A[a-w].push_back(v);
  } 
  for(int i=0;i<4;i++)
    sort(A[i].begin(),A[i].end(),greater<ll>());
  
  
  cout<<dfs(3,0)<<endl;
  return 0;
}
