#include <iostream>
#include <cstring>
#include <algorithm>
#include <iomanip>
using namespace std;

const int SIZE = 200;

struct Doll
{
	int h;
	int r;
	bool operator<( const Doll& d ) const
	{
		if( this->h < d.h ) return true;
		if( this->h > d.h ) return false;
		if( this->r < d.r ) return true;
		return false;
	}
};

int main()
{

	int n, m;
	while( cin >> n && n ){
		int memo[ SIZE ][ SIZE ];
		Doll doll[ SIZE ];
		memset( memo, 0, sizeof(memo) );
		for( int i = 0; i < n; ++i ){
			cin >> doll[ i ].h >> doll[ i ].r;
		}
		cin >> m;
		for( int i = 0; i < m; ++i ){
			cin >> doll[ n + i ].h >> doll[ n + i ].r;
		}
		int numDolls = n + m;
		sort( doll, doll + numDolls );

		int result = 0;
		for( int k = 0; k < numDolls; ++k ){
			for( int i = 0; i < numDolls; ++i ){
				for( int j = 0; j < numDolls; ++j ){
					if( doll[ i ].h < doll[ j ].h && doll[ i ].r < doll[ j ].r ){
						memo[ i ][ j ] = max( memo[ i ][ j ], max( 2, memo[ i ][ k ] + memo[ k ][ j ] - 1 ) );
						if( memo[ i ][ j ] > result ){
							result = memo[ i ][ j ];
						}
					}
				}
			}
		}
		cout << result << endl;
	}

	return 0;
}