#include<bits/stdc++.h>
#define rep(i,N) for(int i=0;i<(N);i++)
#define rrep(i, n) for (int i = (int)n-1; i >= 0; --i)
#define FOR(i,a,b) for(int i=(a);i<(b);i++)
using namespace std;
const long long MOD = 1e9 + 7;
const long long INF = 1e12;
const int inf = 1e9;
const int mod = 1e9+7;
typedef long long ll;
typedef pair<ll,int> P;
typedef set<int> S;

template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; }
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; }

__attribute__ ((constructor))
void fastio() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout << fixed << setprecision(10);
}

int main(){
    int n, m;
    cin >> n >> m;
    vector<int> a(m);
    vector<int> b(m);
    rep(i, m) cin >> a[i] >> b[i];
    rep(i, m){
        a[i]--;
        b[i]--;
    }

    int k;
    cin >> k;
    vector<int> c(k);
    vector<int> d(k);

    rep(i, k){
        cin >> c[i] >> d[i];
        c[i]--;
        d[i]--;
    }

    int ans = 0;

    rep(i,(1<<k)){
        vector<int> sara(n, 0);
        rep(j,k){
            if((i>>j)&1){
                sara[c[j]]++;
            }else{
                sara[d[j]]++;
            }
        }
        int cnt = 0;
        rep(j,m){
            if(sara[a[j]] > 0 && sara[b[j]] > 0)
                cnt++;
        }
        chmax(ans, cnt);
    }

    cout << ans << endl;

    return 0;
}
#include<bits/stdc++.h>
using namespace std;
const int N=110;
int n,m,k,a[N],b[N],c[N],d[N];
int vis[N],ans;
void dfs(int x){
	if(x==k+1){
		int sum=0;
		for(int i=1;i<=m;i++){
			if(vis[a[i]]&&vis[b[i]]){
				sum++;
			}
		}
		ans=max(ans,sum);
		return ;
	}
	vis[c[x]]++;
	dfs(x+1);
	vis[c[x]]--;
	vis[d[x]]++;
	dfs(x+1);
	vis[d[x]]--;
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++){
		scanf("%d%d",&a[i],&b[i]);
	}
	scanf("%d",&k);
	for(int i=1;i<=k;i++){
		scanf("%d%d",&c[i],&d[i]);
	}
	dfs(1);
	printf("%d\n",ans);
}