/*                                   *MELLOW THE PANDA*
  `||||||||||||||||||||||!!!||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  `||||||||||||||||||!''      !!||||pp@@@@@@@@@@@@@@@@@@@@@@||||||!'````````||||||||||||||||
   |||||||||||||||!'`         ,g@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@L           `|||||||||||||||
   '||||||||||||'`         ,p@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@           `||||||||||||||
   '|||||||||||'         j@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@w          ``||||||||||||
   '||||||||||`        ,g@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@,         `||||||||||||
   ||||||||||'       ,@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@L        `|||||||||||
   '|||||||||       @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@p      `'||||||||||
   '|||||||||;,   /@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@,   `<|||||||||||
   '|||||||||||!;p@@@@@@@@M*     **%@&@F***********&@@@@@@N%@@@@@@@@@@@@@@@@w!||||||||||||||
   '||||||||||||j@@@@@@@N  |!"*!,@@@@@[            &@@&@@m        ?@@@@@@@@g||||||||||||||||
   '||||||||||||]@@@@@@@  ||  #r)@@@@@@$,         g@@@@@@@@|"""!|; ]@@@@@@@@@@||||||||||||||
   `||||||||||||]@@@@@@|  ||   g@@@@@@@@@@p    ,@@@@@&@@@@@@|#L !|  %@@@@@@@@@k|||||||||||||
   `||||||||||||]@@@@@@    `||$@@@@N@@@@@@&@$@@$@@@@@@@@@@@@@   ||  ]%@@@@@@@@H|||||||||||||
   `||||||||||||]@@@@@@      ^@@@@@NM@@@@@@@@@ |@@@@@@@@@@@@@@''`    %@@@@@@%%||||||||||||||
    ||||||||||||%@@@@@@      ]B@@@@@@|&@@@@@@@M$@@@@@@@@@/@@@@@      ]@@@@@@@%!!!|||||||||||
    '|||||||||||]@@@@@@o      @@@@@@@@@|N@@@@@ @@@@@@@@@|@@@@@@     ]@@@@@@@%  ```'|||||||||
    '|||||||||||]@@@@@@@      ]@@@@@@@@@@]%@N@ Q@@@@%@[]@@@@@@N    p@@@@@@%M        `|||||||
    `||||||||||||]@@@@@@@;     %N@@@@@@@@@@@@Lj@@gg@@@@@@N@@@N   )@@@@@@@@F          '||||||
    `|||||||||||||]%@@@@@@@r    %@@@@@@@@@@@@@@@@@@@@@@@@@@@K   ]@@@@@@@@h          '`||||||
    `||||||||||||||]@%N%N@@@gm,,  j%@@@@@@@@@@@@@@@@@@@@@%h  ;p@@@@@@@@@F            `||||||
    `|||||||||||||||j%@@@@@@@@@p"..                    ,,;g@@@@@@@@@@*"              `||||||
    `||||||||||||||||||]%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@k@]N"                 '||||||
    `|||||||||||||||'``'"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@**'```                        |||||||
    `||||||||||||||'|`     '*@@@@@@@@@@@@@@@@@@@``                                   y||||||
    `'||||||||||||'`            ''"**|||||||||||                                    j|||||||
    ``|||||||||||`                     `'`'|jk*                                   ,j||||||||
    `'|||||||||||                          '`                                   ;p||||||||||
    ``||||||||||'                                                                 `'*j||||||
    ``|||||||||||                                    						              ||
___________________________________________________________________________________________________________________________________________________________*/
#include <bits/stdc++.h> 
#include <ext/pb_ds/assoc_container.hpp>
using namespace std;
using namespace __gnu_pbds;
#pragma comment(linker, "/stack:200000000")
#pragma GCC optimize ("Ofast")
#pragma GCC target ("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#define mellow ios_base::sync_with_stdio(0);cin.tie(0)
#define qa cout<<"------------"<<"\n"
#define fo(i,n) for(ll i=0;i<n;i++)
#define Fo(i,k,n) for(ll i=k;i<n;i++)
#define ll long long
#define deb(x) cout << #x << "=" << x << endl
#define deb2(x, y) cout << #x << "=" << x << "," << #y << "=" << y << endl
#define debV(arr) cout<<#arr<<": "; for(int qwe=0;qwe<arr.size();qwe++) cout<<arr[qwe]<<" "; cout<<"\n"
#define debVV(arr) for(int ewq=0;ewq<arr.size();ewq++) {for(int ews=0;ews<arr[ewq].size();ews++)cout<<arr[ewq][ews]<<" ";cout<<endl;}cout<<endl;
#define pb push_back
#define mp make_pair
#define F first
#define S second
#define all(x) x.begin(), x.end()
#define clr(x) memset(x, 0, sizeof(x))
#define sortall(x) sort(all(x))
#define trav(it, a) for(auto it = a.begin(); it != a.end(); it++)
#define pres(a,x) ((a).find(x) != (a).end())
#define PI 3.1415926535897932384626
#define endl "\n"
#define mod 1000000007
#define sz(x)       (int)x.size()
#define vvl(name,rowsize,colsize) vector<vector<ll>> name((rowsize),vector<ll>(colsize));
#define vvl0(name,rowsize,colsize) vector<vector<ll>> name((rowsize),vector<ll>(colsize,0));
#define meme(ssss) for(int zasi=0;zasi<ssss.size();zasi++){for(int zasj=0;zasj<ssss[zasi].size();zasj++)ssss[zasi][zasj]=0;}
#define LLM LONG_LONG_MAX
typedef tree<ll, null_type, less<ll>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;
typedef pair<ll, ll>	pll;
typedef vector<int>     vi;
typedef vector<ll>		vll;
typedef vector<string>  vs;
vi X={0,-1,0,1};
vi Y={-1,0,1,0};

ll powerFast(ll a,ll b)
{
	if(b==0)
		return 1;
	ll c=powerFast(a,b/2);
	if(b%2==0)
		return ((c%mod)*(c%mod))%mod;
	else
		return ((((c%mod)*(c%mod))%mod)*a)%mod;
}
ll powerFast2(ll a,ll b)
{
	if(b==0)
		return 1;
	ll c=powerFast(a,b/2);
	if(b%2==0)
		return ((c)*(c));
	else
		return ((((c)*(c)))*a);
}
//add custom hash infront of unordered_map and gp_hash_table
struct custom_hash {
    static uint64_t splitmix64(uint64_t x) {
        x += 0x9e3779b97f4a7c15;
        x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
        x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
        return x ^ (x >> 31); 
    }
 
    size_t operator()(uint64_t x) const {
        static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count();
        return splitmix64(x + FIXED_RANDOM);
    }
};
//____________________________________________________________________________________________________________________________________________________________
ll compute()
{
	ll n,w;
	cin>>n>>w;
	vector<vll> item(n+1,vll (2,0));
	
	//weight value
	for(int i=1;i<=n;i++)
	{
		for(int j=0;j<2;j++)
		{
			cin>>item[i][j];
		}
	}
	
	vector<vll> a(n+1,vll (w+1,0));
	
	for(int i=1;i<a.size();i++)
	{
		for(int j=1;j<a[i].size();j++)
		{
			if(j-item[i][0]>=0)
				a[i][j]=max(a[i-1][j],item[i][1]+a[i-1][j-item[i][0]]);
			else
				a[i][j]=a[i-1][j];
		}
	}
	return a[n][w];
}
int main()
{
	mellow;
	ll TESTS=1;
	//cin>>TESTS;
	while(TESTS--)
	{
	cout<<compute()<<"\n";
	//compute();
	}
	return 0;
}

Measured memory_bytes: 80256