#include<bits/stdc++.h>

using namespace std;

#define LL long long
#define DD double
#define Pb push_back
#define Bp pop_back
#define Pf push_front
#define Fp pop_front
#define Ub upper_bound
#define Lb lower_bound
#define In insert
#define All(x) x.begin(), x.end()
#define mem(a, b) memset(a, b, sizeof(a))
#define fast ios_base::sync_with_stdio(0);cin.tie(0)
#define X first
#define Y second
#define mx1 10
#define mx2 110
#define mx3 1010
#define mx4 10010
#define mx5 100010
#define mx6 1000010

typedef vector<LL> Vl;
typedef vector<DD> Vd;
typedef vector<bool> Vb;
typedef vector<Vl> VVl;
typedef pair<LL, LL> Pll;
typedef pair<DD, DD> Pdd;
typedef vector<Pll> Vpl;
typedef vector<Pdd> Vpd;
typedef queue<LL> Ql;
typedef stack<LL> Sl;
typedef deque<LL> Dl;

LL _set(LL N, LL pos) {return N = N | (1 << pos);}
LL _reset(LL N, LL pos) {return N = N & ~(1 << pos);}
bool _check(LL N, LL pos) {return (bool)(N & (1 << pos));}
bool _upper(char a) {return a >= 'A' && a <= 'Z';}
bool _lower(char a) {return a >= 'a' && a <= 'z';}
bool _digit(char a) {return a >= '0' && a <= '9';}

LL dx[] = {1, -1, 0, 0, -1, -1, 1, 1};
LL dy[] = {0, 0, 1, -1, -1, 1, -1, 1};

///**************************DONE****************************///

int dp[12][9 * mx6], g, d, p[12], c[12];

int stt(int id, int S)
{
    if(id > d){
        if(S < g)
            return 1e7;
        return 0;
    }

    if(dp[id][S] != -1)
        return dp[id][S];

    int ans = INT_MAX;
    for(int i = 0; i < p[id]; i++){
        ans = min(ans, i + stt(id + 1, S + i * id * 100));
    }

    ans = min(ans, p[id] + stt(id + 1, S + id * 100 * p[id] + c[id]));

    return dp[id][S] = ans;
}

int main()
{
    mem(dp, -1);
    cin >> d >> g;

    for(int i = 1; i <= d; i++)
        cin >> p[i] >> c[i];

    cout << stt(1, 0) << '\n';
    return 0;
}

#include <bits/stdc++.h>

int main(){
    long long D, G;
    std::cin >> D >> G;
    G /= 100;
    std::vector< int > P(D);
    std::vector< int > C(D);
    for(int i=0; i<D; i++){
        std::cin >> P[i] >> C[i];
        P[i];
        C[i] /= 100;
    }
    
    std::vector< std::vector< int > > dp(D+1, std::vector< int >(G+1, 1e8));
    dp[0][0] = 0;
    
    for(int i=1; i<=D; i++){
        std::vector< int > cur(G+1, 1e8);
        cur[0] = 0;
        for(int j=1; j<=G; j++){
            if(i * P[i-1] + C[i-1] < j){
                break;
            }else if(i * P[i-1] < j){
                cur[j] = P[i-1];
            }else{
                cur[j] = j / i + (j % i != 0);
            }
        }
        int index_a1 = 1, index_a2 = 0, index_b1 = 0, index_b2 = 1;
        dp[i][0] = 0;
        while(index_a1 + index_a2 <= G){
            int a = dp[i-1][index_a1] + cur[index_a2];
            int b = dp[i-1][index_b1] + cur[index_b2];
            if(a > b){
                dp[i][index_a1 + index_a2] = b;
            }else{
                dp[i][index_a1 + index_a2] = a;
            }
            
            if(index_a1 == G || dp[i-1][index_a1+1] >= 1e8){
                index_a2++;
            }else{
                index_a1++;
            }
            
            if(index_b2 == G || cur[index_b2+1] >= 1e8){
                index_b1++;
            }else{
                index_b2++;
            }
        }
    }
    
    
    std::cout << dp[D][G] << std::endl;
    
    
    return 0;
    
}
