#include <bits/stdc++.h>
using namespace std;
const int N=2e5+2;
queue<int>q[N];
long long ans=0;
int n,a[N],b[N],c[N],f[N];
void add(int x,int y)
{
	while(x)
	{
		f[x]+=y;
		x^=x&-x;
	}
}
int qry(int x)
{
	int res=0;
	while(x<=n)
	{
		res+=f[x];
		x+=x&-x;
	}
	return res;
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;++i)
		scanf("%d",&a[i]);
	for(int i=1;i<=n;++i)
	{
		scanf("%d",&b[i]);
		c[i]=b[i]+i;
	}
	sort(c+1,c+n+1);
	for(int i=1;i<=n;++i)
		q[lower_bound(c+1,c+n+1,b[i]+i)-c].push(i);
	for(int i=1;i<=n;++i)
	{
		int x=lower_bound(c+1,c+n+1,a[i]+i)-c;
		if(q[x].empty()||a[i]+i!=c[x])
		{
			puts("-1");
			return 0;
		}
		a[i]=q[x].front();
		q[x].pop();
		ans+=qry(a[i]);
		add(a[i],1);
	}
	printf("%lld",ans);
}

#include <bits/stdc++.h>

using namespace std;

#define int long long int
#define vi vector<int>
#define vvi vector<vector<int>> 
#define mii map<int,int>
#define pii pair<int,int>
#define ff first
#define ss second
#define ce cout << endl ;
#define pb push_back
#define mkp make_pair
#define py cout << "YES" << endl ;
#define pn cout << "NO" << endl ;
#define fio ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL) ; 

bool cmp(pii& a , pii& b){
    int asum = a.ff + a.ss , bsum = b.ff + b.ss ; 
    return asum + a.ff > bsum + b.ff  ;
}

const int  l = 2e7 + 1 , mod = 1e9 + 7 ;

vi prime(l , 0) , phi(l + 1) , store(l , 0) ;

vvi factor(l) ;

void f(){
    prime[1] = 1 , prime[0] = 1 ;
    for(int i = 2 ; i < l ; i++){
        if(!prime[i]){
            for(int j = i*i ; j < l ; j+=i) prime[j] = 1 ; 
        }
    }
    for(int i = 2 ; i < l ; i++){
        if((not prime[i]) and (not prime[i-2])) store[i] = 1 ;
        store[i]+=store[i-1] ;
    }
}

int factorial(int n){
    int ans = 1 ; 
    for(int i = 2 ;i<=n ;i++) ans*=i ;
    return ans ;
}

int lcm(int a , int b){
    return (a*b) / __gcd(a , b) ;
}

void print(vi &a){
    for(auto it : a) cout << it << " " ;
}

int modadd(int a , int b){
    return (a%mod + b%mod) % mod ;
}

int modsub(int a , int b){
    return ( ( ( a % mod ) - ( b % mod ) ) + mod ) % mod ; 
}

int modmul(int a , int b){
    return ( (a % mod) * (b % mod) ) % mod ;
}

int fast_mod_expo(int base , int power , int ans){
    if(power > 0){
        if(power & 1) ans = modmul(ans , base) ;
        power >>= 1 , base = modmul(base , base) ;
        return fast_mod_expo(base , power , ans) ;
    }
    else return ans ;
}

void store_divisors(){
    for(int i = l-1 ; i > 0 ; i--) {
        for(int j = i ; j < l ; j+=i) factor[j].pb(i) ;
    }
}

int EulerTotientfuunction(int n){
    int ans = n ;
    for(int i = 2 ; i < n ; i++){
        if(n%i==0){
            while(n%i==0)n/=i;
            ans-=ans/i ;
        }
    }
    if(n > 1) ans-=ans/n ;
    return ans ;
}

int binarysearch(int* a , int l , int r , int key){
    if(l <= r){
        int mid = (l + r)>>1 ;
        if(a[mid] < key) l = mid + 1 ;
        if(a[mid] > key) r = mid - 1 ;
        if(a[mid] == key) return key ;
        return binarysearch(a , l , r , key) ;
    }
    else return 0 ;
}

class graph{
    int v ;
    list<int> *l ;
    public:
        void create_list(int v){
            this->v = v ;
            l = new list<int>[v+1] ;
        }
        void addedge(int u , int v){
            l[u].pb(v) ;
            l[v].pb(u) ;
        }
        void print_list(){
            for(int i = 1 ; i <= v ; i++){
                cout << "Vertex:" << i << "->" ;
                for(auto it : l[i]) cout << it << "->" ;
                ce
            }
        }
};

void solve(){
    int n , aoki = 0 , takashi = 0 , ans = 0 ;
    cin >> n ;
    vector<pii> a ;
    for(int i = 0 , l , r ; i < n ; i ++){
        cin >> l >> r ;
        a.pb(mkp(l , r)) ;
        aoki+=l ;
    }
    sort(a.begin() , a.end() , cmp) ;
    for(int i = 0 ; i<n and aoki>=takashi ; i ++ , ans++){
        takashi += a[i].ff + a[i].ss ;
        aoki -= a[i].ff ;
    }
    cout << ans ;
}

int32_t main() {
    int t = 1 ;
    //cin >> t ;
    while(t--) solve() ;
    return 0;
}
