#include<cstdio>
#include<iostream>
#include<string>
#include<algorithm>
#include<stdio.h>
#include<locale.h>
#include<set>
#include<stack>
#include<queue>
using namespace std;

int main()
{
 int d,g,p[11],c[11],scr[11][1001]={};
 scanf("%d %d",&d,&g);
 int sm=0;
 for(int i=1;i<=d;i++)
 {
	scanf("%d %d",&p[i],&c[i]);
sm+=p[i];
 }
 for(int i=1;i<=d;i++)
 {
	for(int j=0;j<=sm;j++)
	{
	 //scr[i][j]の最大値はscr[i-1][j]かscr[i-1][j-N]+N*i*100かコンプリートが入るやつか
	 	for(int k=0;k<=min(j,p[i]);k++)
		{
		 if(k==p[i]){scr[i][j]=max(scr[i-1][j],(scr[i-1][j-k]+i*100*k+c[i]));}
		 else{scr[i][j]=max(scr[i-1][j],(scr[i-1][j-k]+i*100*k));}
		}
	}
 }
 for(int i=0;i<=1000;i++)
 {
	if(scr[d][i]>=g){printf("%d",i);break;}
 }
}


#include<bits/stdc++.h>
using namespace std;
int main(){
  int d,g,i,j,y,z,ans=1000;
  cin>>d>>g;
  vector<int> p(d),c(d);
  for(i=0;i<d;i++) cin>>p.at(i)>>c.at(i);
  for(i=0;i<(1<<d);i++){
    bitset<10> b(i);
    y=0;z=0;
    for(j=0;j<d;j++){
      if(b.test(j)){
        y+=p.at(j);
        z+=100*(j+1)*p.at(j)+c.at(j);
      }
    }
    for(j=d-1;j>=0;j--){
      if(g<=z) break;
      else if(!b.test(j)){
        if(g-z>100*(j+1)*(p.at(j)-1)){
          y+=p.at(j)-1;
          z+=100*(j+1)*(p.at(j)-1);
        }
        else{
          y+=(g-z)/(100*(j+1));
          if((g-z)%(100*(j+1))>0) y++;
          z=g;
        }
      }
    }
    if(g<=z&&y<ans) ans=y;
  }
  cout<<ans<<endl;
}