/*
TASK:lift
LANG:C++
*/

#include <stdio.h>
#include <math.h>
#include <algorithm>

using namespace std;

struct bla {int v; int t;};

bla a[15],b[15];

void ssort1(int n)
{
 for (int i=0; i<=n-2; i++)     
     for (int j=0; j<=n-i-1; j++)
              if ((a[j].v<a[j+1].v) || ((a[j].v==a[j+1].v)&&(a[j].t>a[j+1].t)) ) 
                 swap(a[j],a[j+1]);
};

void ssort2(int n)
{
 for (int i=0; i<=n-2; i++)     
     for (int j=0; j<=n-i-1; j++)
              if ((b[j].v<b[j+1].v) || ((b[j].v==b[j+1].v)&&(b[j].t>b[j+1].t)) ) 
                 swap(b[j],b[j+1]);
};

/*
void ssort3(int n)
{
 for (int i=0; i<=n-2; i++)     
     for (int j=0; j<=n-i-1; j++)
         {
              if (a[j].v<a[j+1].v) swap(a[j],a[j+1]);
         }
};
*/
main()
{
         int fl=0,j;
          int n,t,res=0;
          scanf("%d%d",&n,&t);
          for (int i=0; i<n; i++) scanf("%d%d",&a[i].v,&a[i].t);
          
          int pom[15];
          int bra=n,brb=0;
          int tt,l,pr,max,ind,pp;
          while ((bra>0) && (fl==0))
          {
                      ssort1(bra);
                      tt=t;
                      b[brb]=a[0]; pr=1; pom[0]=0;
                      
                      res=res+a[0].v;
                      
                      brb++; tt=tt-a[0].t; 
//                      printf("%d %d",a[0].v,a[0].t);
                      if ((tt-a[bra-1].t)>=0) {tt=tt-a[bra-1].t; b[brb]=a[bra-1]; brb++; bra--;};
                      l=1; pp=1;
                      for (int l=1; l<bra; l++) 
                          if ((tt-a[l].t)>=0) //for za da vidi vsi4kite
                            {
                                             tt=tt-a[l].t;  
                                             b[brb]=a[l];
//                                           printf("%d %d",a[l].v,a[l].t);
                                             pom[pp]=l;pp++;
                                             brb++;
                                             pr++;
                            };
//                            printf("  %d\n",tt);
                      for (int i=0; i<pr; i++) a[pom[i]].v=0;
                      ssort1(bra);
                      bra=bra-pr;
                if (bra>0)
                {
                      ssort2(brb);  
                      ssort1(bra);
                      max=0; ind=-1;
                      for (int i=brb-1; i>=0; i--) 
                          {
                           j=0; tt=t-b[i].t;
                           while ((j<bra) && ((tt-a[j].t)>=0)) {tt=tt-a[j].t; j++;};
                           if (max<j) {max=j; ind=i;};
                          };
                      if (ind==-1)
                         {printf("0\n"); fl=1;}
                         else 
                         {
                              res=res+b[ind].v;
                              a[bra]=b[ind];
                              bra++;
                              b[ind]=b[brb-1]; brb--;
                         }
                };
          } 
    if (fl==0) printf("%d\n",res);
}
