#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
const long long N = 2.5 * 1e5 + 5;
long long n ,b1 = 0;
struct Node {
long long a ,b;
long long id;
}a[N];
priority_queue<Node> q;
bool operator <(Node a ,Node b) {
if(a.b == b.b) return a.id < b.id;
return a.b > b.b;
}
long long inv = 0;
long long ans = 0;
long long num[N];
bool vis[N];
int main() {
cin >> n;
for(long long i = 1; i <= n; i ++) {
cin >> a[i].a;
a[i].id = i;
}
for(long long i = 1; i <= n; i ++) {
cin >> a[i].b;
}
for(long long i = 1; i <= n; i ++) {
inv += a[i].a;
if(inv >= a[i].b) {
inv -= a[i].b;
q.push((Node)a[i]);
ans ++;
vis[i] = 1;
}
else {
if(q.empty()) continue;
if(q.top().b > a[i].b) {
inv += q.top().b;
inv -= a[i].b;
vis[q.top().id] = 0;
vis[a[i].id] = 1;
q.pop();
q.push((Node)a[i]);
}
}
}
cout << ans << '\n';
for(int i = 1; i <= n; i ++) if(vis[i]) cout << i << ' ';
return 0;
}