#include <bits/stdc++.h>
using namespace std;

struct doll{
    int h,r;
};

bool operator<(const doll& d1,const doll& d2){
    if(d1.h == d2.h){
        return d1.r > d2.r;
    }
    return d1.h < d2.h;
}

int dp[1001][1001] = {0};//h,r

int main() {

    while(1){

        for(int i=0;i<1001;i++){
            for(int j=0;j<1001;j++){
                dp[i][j] = 0;
            }
        }

        int n;

        cin >> n;

        if(n==0) break;

        int h,r;

        vector<doll> v;
        doll tmp;

        for(int i=0;i<n;i++){
            cin >> h >> r;
            tmp.h = h;
            tmp.r = r;
            dp[h][r] = 1;
            v.push_back(tmp);
        }

        int m;

        cin >> m;

        for(int i=0;i<m;i++){
            cin >> h >> r;
            tmp.h = h;
            tmp.r = r;
            dp[h][r] = 1;
            v.push_back(tmp);
        }

        /*for(int i=0;i<n+m;i++){
            cout << v[i].h << " " << v[i].r << endl;
        }*/

        sort(v.begin(),v.end());



        for(int k=0;k<n+m;k++) {
            for (int i = 1; i < v[k].h; i++) {
                for (int j = 1; j < v[k].r; j++) {
                    if (dp[i][j] != 0) {
                        dp[v[k].h][v[k].r] = max(dp[v[k].h][v[k].r], dp[i][j] + 1);
                    }
                }
            }
        }

        /*for(int i=0;i<=n+m;i++){
            for(int j=0;j<=n+m;j++){
                cout << dp[i][j] << " ";
            }
            cout << endl;
        }*/

        int ans = 0;

        for(int i=0;i<n+m;i++){
            //cout << dp[i] << endl;
            ans = max(dp[v[i].h][v[i].r],ans);
        }

        cout << ans << endl;


    }

    return 0;
}