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

int f[20010];//描述集合关系

//查:查询元素的根 
int find(int x){
	return f[x]==x?x:f[x]=find(f[x]);
} 

//并:合并元素xy
void merge(int x,int y){
	int fx = find(x);
	int fy = find(y);
	if(fx != fy){
		f[fx] = fy;
	}
} 

int main(){
	int n,m,p,q;
	cin>>n>>m>>p>>q; 
	int ra = 0,rb = 0;//ab公司每个集合中和小明、小明认识的人的数量
	//初始化 
	for(int i = 1;i <= n + m;i++) f[i] = i;
	
	//读入p个关系
	int x,y;
	for(int i = 1;i <= p;i++){
		cin>>x>>y;
		merge(x,y); 
	} 
	
	//读入q个关系
	for(int i = 1;i <= q;i++){
		cin>>x>>y;
		x = x * -1;
		y = y * -1;
		merge(x+n,y+n);
	} 
	
	//求和1号以及n+1号是朋友的人的数量
	for(int i = 1;i <= n;i++){
		if(find(i) == find(1)) ra++;
	} 
	
	for(int i = n+1;i <= n + m;i++){
		if(find(i) == find(n+1)) rb++; 
	} 
	
	cout<<min(ra,rb);
} 

/**************************************************************
	Problem: 1932
	User: admin
	Language: C++
	Result: Accepted
	Time:34 ms
	Memory:2152 kb
****************************************************************/