#include <stdio.h>
int rec(int i, int j);
int mymax(int a, int b);
int w[100];//??°?????????????????°
int v[100];
int n;
int main(void)
{
	int W;
	int i, j = 1;
	printf("put number:n=?\n");//??\???
	scanf("%d %d", &n,&w);
  
	for (i = 0; i<n; i++){
		scanf("%d", &v[i]);
		scanf("%d", &w[i]);
		j++;
	}
		printf("%d\n", rec(0, W));

        return 0;

}

int rec(int i, int j)//i????????\????????????????????????????????????j??\??????????????????????????¶
{
	int res;
	if (i == n){
		res = 0;
		//????????????????????£????????????
	}
	else if (j < w[i]){
		res = rec(i + 1, j);
		//?????????????????\?????????
	}
	else{
		res = mymax(rec(i + 1, j), rec(i + 1, j - w[i]) + v[i]);
		//??\????????´?????¨??\???????????´?????????????????????

	}
	return res;
}
//?????§????????????
int mymax(int a, int b){
	int max;
	max = a;
	if (max<b)max = b;
	return max;
}