#include<cstdio>
#include<cmath>
#include<string>
#include<iostream>
#include<algorithm>
#include<utility>
#include<vector>
#include<map>
#include<set>
#include<limits>
#include<bitset>
#include<array>
#include<numeric>
#include<iomanip>
#include<functional>
#include<deque>

using namespace std;
typedef long long int ll;

#define C cout<<
#define E <<endl

#define SIZ 1000

int v,e;
int s[SIZ],t[SIZ],d[SIZ],p[SIZ];
bool ftf[20][20];
int dtf[20][20];
bool restedges=false,directed=true;
vector<int> ec;
vector<vector<int>> dp;

vector<vector<int>> v2vec(int x,int y,int value=0){ return vector<vector<int>>(y,vector<int>(x,value)); }

ll powm(int target,int repeat){
    ll result=1;
    for(int i=0;i<repeat;i++)result*=target;
    return result;
}

vector<int> to2(int target,int digit){
    vector<int> tovec;
    for(int i=0;i<digit;i++){
        tovec.push_back(target%2);
        target=target>>1;
    }
    return tovec;
}

bool inflag(int s,int t){ return restedges ? (directed ? ftf[s][t]:ftf[s][t] or ftf[t][s]):true; } //辺は存在する？

int indist(int s,int t){ return directed ? dtf[s][t]:max(dtf[s][t],dtf[t][s]); } //辺の長さ


int ceilm(int target,int ds){
    return target%ds ? target/ds+1:target/ds;
}


void setBitDP(vector<vector<int>> &fdp,int xn,int * xval,int dfval=-1){
    
    fdp=v2vec(xn,powm(2,xn),dfval);
    
    function<bool(int)> fff=[](int wh){
        return true;
    };
    
    for(int i=0;i<xn;i++){
        fdp[powm(2,i)][i]=fff(i) ? (xval==0 ? 0:xval[i]):dfval;
        if(fdp[powm(2,i)][i]>=e){
            ec.push_back(min(ceilm(e,p[i]),s[i]));
            fdp[powm(2,i)][i]=-1;
        }
        
        
    }
}

int main(){
    
    cin>>v>>e;
    
    for(int i=0;i<v;i++){
       cin>>s[i]>>t[i];
       d[i]=100*(i+1)*s[i]+t[i];
       p[i]=100*(i+1);
    }
    
    bool debug=false;
    
    int ysiz=powm(2,v); //2^横の大きさ
    int xsiz=v;
    
    setBitDP(dp,xsiz,d);
    
    vector<int> qbit;
    
    for(int y=0;y<ysiz;y++){
        
        qbit=to2(y,xsiz);
        
        for(int x=0;x<xsiz;x++){
            //---
            
            if(dp[y][x]!=-1){
                //---
                for(int i=0;i<xsiz;i++){
                    if(!qbit[i] and inflag(x,i)){
                        int cqy=y+powm(2,i);
                        //---
                        int mqy=dp[y][x];
                        
                        dp[cqy][i]=
                            dp[cqy][i]==-1 ?
                            dp[y][x]+d[i] :
                            max(dp[y][x]+d[i],dp[cqy][i]);
                        
                        if(dp[cqy][i]>=e){
                            int qq=0,cnq=0;
                            for(int j=0;j<xsiz;j++)qq+=s[j]*qbit[j];
                            //C qq<<" "<<e-dp[y][x]<<" "<<p[i] E;
                            cnq=min(ceilm(e-dp[y][x],p[i]),s[i]);
                            qq+=cnq;
                            ec.push_back(qq);
                            dp[cqy][i]=-1;
                        }
                        //---
                    }
                }
                //---
            }
            //---
        }
    }
    
    if(debug){
        for(int y=0;y<ysiz;y++){
            qbit=to2(y,xsiz);
            for(auto i:qbit) C i;
            C " ";
            for(int x=0;x<xsiz;x++)C " "<<dp[y][x];
            C "" E;
        }
    }
    
    int mm=ec[0];
    
    for(auto it:ec)mm=min(it,mm);
    
    C mm E;
}

Measured memory_bytes: 384