//https://www..com/Christal-R/p/Dynamic_programming.html
#include<stdio.h>
void Findmax();
int Max(int a,int b);
int v[10],w[10],dp[10],number,capacity;
int main()
{
  int i,j;
  while(scanf("%d%d",&number,&capacity)!=EOF)
  {
    for(i=1;i<=number;i++)
      scanf("%d%d",&v[i],&w[i]);
    Findmax();
    printf("%d\n",dp[capacity]);
  }
  return 0;
}
void Findmax()
{
  int i,j;
  for(i=1;i<=number;i++)
    for(j=capacity;j>=1;j--)
      if(j>=v[i])
        dp[j]=Max(dp[j-1],dp[j-v[i]]+w[i]);
}
int Max(int a,int b)
{
  if(a>b)
    return a;
  return b;
}









