#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5,oo=0x3f3f3f3f;

long long memo[100][N],w[N],v[N],n,W;

long long dp(int i, int wi){
    if(i>=n) return 0;
    if(memo[i][wi]!=-1)return memo[i][wi];
    long long t=-oo;
    if(w[i]+wi<=W)t=dp(i+1,w[i]+wi)+v[i];
    long long l=dp(i+1,wi);
    return memo[i][wi]=max(t,l);
}

int main(){
    memset(memo,-1,sizeof memo);
    cin >> n >> W;
    for(int i=0;i<n;i++){
        cin >> w[i] >> v[i];
    }
    cout << dp(0,0);
    return 0;
}

