#pragma GCC optimize(2)
#pragma GCC optimize(1)
#include<bits/stdc++.h>
typedef long long ll;
typedef unsigned long long ull;
const ull base=131;
#define MAX 1009
#define PI 3.141592653589793
using namespace std;
int f[MAX],bb[MAX][2];
int m,n;
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>bb[i][0]>>bb[i][1];
for(int i=1;i<=n;i++){
for(int j=m;j>=bb[i][0];--j){
f[j]=max(f[j],f[j-bb[i][0]]+bb[i][1]);
}
}
cout<<f[m]<<endl;
}
#pragma GCC optimize(2)
#pragma GCC optimize(1)
#include<iostream>
#include<queue>
#include<vector>
typedef long long ll;
typedef unsigned long long ull;
const ull base=131;
#define MAX 1009
#define PI 3.141592653589793
using namespace std;
int f1[MAX],f2[MAX],bb[MAX][2];
int m,n;
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>bb[i][0]>>bb[i][1];
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(j<bb[i][0])
f2[j]=f1[j];
else
f2[j]=max(f1[j],f1[j-bb[i][0]]+bb[i][1]);
}
memcpy(f1,f2,sizeof(f2));
}
cout<<f2[m]<<endl;
}