#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

struct D{int h, r;};
bool ascendDr(const D& d1, const D& d2){
  return d1.r < d2.r;
}
bool ascendDh(const D& d1, const D& d2){
  return d1.h < d2.h;
}

int main(void){
  int n, m, dp[200];
  D dolls[200];
  while(cin >> n, n){
    for(int i = 0; i < n; i++) cin >> dolls[i].h >> dolls[i].r;
    cin >> m;
    for(int i = n; i < n + m; i++) cin >> dolls[i].h >> dolls[i].r;

    int lis_r = 0, lis_h = 0;
    sort(dolls, dolls + n + m, ascendDr);

    dp[0] = 1;
    for(int i = 1; i < n + m; i++){
      dp[i] = 1;
      for(int j = 0; j < i; j++){
        if(dolls[j].r < dolls[i].r && dolls[j].h && dolls[i].h){
          dp[i] = max(dp[i], dp[j] + 1);
        }
      }
    }
    lis_r = dp[n+m-1];

    sort(dolls, dolls + n + m, ascendDh);

    dp[0] = 1;
    for(int i = 1; i < n + m; i++){
      dp[i] = 1;
      for(int j = 0; j < i; j++){
        if(dolls[j].r < dolls[i].r && dolls[j].h && dolls[i].h){
          dp[i] = max(dp[i], dp[j] + 1);
        }
      }
    }
    lis_h = dp[n+m-1];

    cout << max(lis_h, lis_r) << endl;
  }
  return 0;
}