#include <bits/stdc++.h>
using namespace std;
const int N=100010;
int n,m,ans,mk[N];
unordered_map<int,int>mp;
struct node {
int l,k;
vector<int>a,b,c,d;
}s[N];
int main () {
freopen("Cappuccino.in","r",stdin);
freopen("Cappuccino.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin >> n;
for (int i=1;i<=n;i++) {
int a,b;
cin >> a >> b;
mp[a]=b;
}
cin >> m;
for (int i=1;i<=m;i++) {
cin >> s[i].l;
int flag=0;
s[i].a.push_back(0);
s[i].b.push_back(0);
s[i].c.push_back(0);
s[i].d.push_back(0);
for (int j=1;j<=s[i].l;j++) {
int a,b;
cin >> a >> b;
s[i].a.push_back(a),s[i].b.push_back(b);
if (s[i].b[j]>mp[s[i].a[j]]) flag=1;
}
cin >> s[i].k;
for (int j=1;j<=s[i].k;j++) {
int a,b;
cin >> a >> b;
s[i].c.push_back(a),s[i].d.push_back(b);
if (!flag) mp[s[i].c[j]]+=s[i].d[j];
}
if (!flag) {
mk[i]=1;
ans++;
}
}
while (ans<=m) {
int t=0;
for (int i=1;i<=m;i++) {
if (mk[i]) continue;
int flag=0;
for (int j=1;j<=s[i].l;j++) if (s[i].b[j]>mp[s[i].a[j]]) flag=1;
if (!flag) {
t=1;
mk[i]=1;
ans++;
for (int j=1;j<=s[i].k;j++) mp[s[i].c[j]]+=s[i].d[j];
}
}
if (!t) break;
}
cout << ans <<endl;
return 0;
}