#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
****************************************************************/