#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
using std:: endl;
using std:: cout;
using std:: cin;
int read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-') f=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
x=(x<<3)+(x<<1)+(ch^48);
ch=getchar();
}
return x*f;
}
const int maxn = 1011;
const int ADD = maxn*8;
int a[maxn],b[maxn];
int num[maxn];
int f[1000001];
int main(){
int n=read();
int sum = 0;
for(int i=1;i<=n;i++){
a[i]=read(); b[i]=read();
num[i]=a[i]*2-b[i]*2;
sum+=a[i]-b[i];
}
for(int i=0;i<=maxn*10+ADD;i++) f[i]=1000001;
f[ADD+sum]=0;
for(int i=1;i<=n;i++){
for(int j=maxn*7+ADD;j>=ADD-maxn*7;j--){
f[j]=std:: min(f[j],f[j+num[i]]+1);
}
}
int search=0;
while(true){
if(f[search+ADD]<1000001||f[ADD-search]<1000001){
cout<<std:: min(f[ADD+search],f[ADD-search]);
break;
}
search++;
}
return 0;
}