/*
TASK:lift
LANG:C++
*/
#include <iostream>
#include <fstream>
#define MP make_pair
#define y second
#define x first

using namespace std;

int n,T;
pair<int,int> t[16],w[16];

int main()
{
    int i,j,k,l,a1,a2;
    cin>>n>>T;
    for (i=0; i<n; i++)
    { cin>>t[i].x>>t[i].y; w[i].x=t[i].y; w[i].y=t[i].x; }
    
    sort(t,t+n);
    bool fl;
    for (i=0; i<n; i++)
    {
      fl=true;
      for (j=0; j<n; j++)
       if (i!=j && t[i].y+t[j].y>T) { fl=false; break; }
      if (fl) break; 
    }
    if (!fl) { cout<<0<<"\n"; return 0; }
    
    int put=0;
    k=i;
    j=t[i].y; l=t[i].x; a1=0;
    for (i=n-1; i>=0; i--)
    if (i!=k)
    { 
     if (j+t[i].y<=T)
      { j+=t[i].y; if (t[i].x>l) l=t[i].x; }
     else
      { put++; a1+=l; j=t[k].y; l=t[k].x; i++; } 
    }
    if (j>t[k].y)
     { a1+=l; put++; }
     
    a1+=t[k].x*(put-1);
    

    j=0;
    for (i=0; i<n; i++)
     if (t[i].y<t[j].y) j=i;
    fl;
    for (i=0; i<n; i++)
    {
      fl=true;
      if (i!=j && t[i].y+t[j].y>T) { fl=false; break; }
      if (fl) break;
    }
    if (!fl) { cout<<0<<"\n"; return 0; }
    
    put=0;
    k=j;
    j=t[k].y; l=t[k].x; a2=0;
    for (i=n-1; i>=0; i--)
    if (i!=k)
    { 
     if (j+t[i].y<=T)
      { j+=t[i].y; if (t[i].x>l) l=t[i].x; }
     else
      { put++; a2+=l; j=t[k].y; l=t[k].x; i++; } 
    }
    if (j>t[k].y)
     { a2+=l; put++; }
    a2+=t[k].x*(put-1); 
    
    
//    cout<<a1<<" "<<a2<<"\n";
    cout<<min(a1,a2)<<"\n";
    return 0;
}
