#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<string>
#include<stack>
#include<queue>
#include<string.h>
#include<array>
#include<algorithm>
#include<cmath>
#define ff first
#define ss second
#define endl '\n'
#define int long long
const int maxn = 5e5;
const int oo = 1e18;
using namespace std;
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
vector<pair<int, int>> D(n + 1);
for(int i = 1; i <= n; i++){
cin >> D[i].ff;
}
for(int i = 1; i <= n; i++){
cin >> D[i].ss;
}
sort(D.begin() + 1, D.begin() + n + 1, [&](pair<int,int> p1, pair<int,int> p2){
return (p1.ff + p1.ss) < (p2.ff + p2.ss);
});
priority_queue<int> pq;
int cur = 0;
for(int i = 1; i <= n; i++){
if(cur <= D[i].ss){
cur += D[i].ff;
pq.push(D[i].ff);
}
else{
if(pq.size() > 0 && pq.top() > D[i].ff){
cur -= pq.top();
cur += D[i].ff;
pq.pop();
pq.push(D[i].ff);
}
}
}
cout << pq.size();
}