#include <iostream>
using namespace std;
const int N=1e4+5;
int n,m,p,q,a[N],b[N],x,y;
int get1(int x){
if(x!=a[x]){
a[x]=get1(a[x]);
return a[x];
}
return x;
}
int get2(int x){
if(x!=b[x]){
b[x]=get2(b[x]);
return a[x];
}
return x;
}
int main()
{
cin >> n >> m >> p >> q;
for(int i=1;i<=n;i++) a[i]=i;
for(int i=1;i<=m;i++) b[i]=i;
for(int i=1;i<=p;i++){
cin >> x >> y;
if(get1(x)!=get1(y)){
a[get1(x)]=get1(y);
}
}
for(int i=1;i<=q;i++){
cin >> x >> y;
x=-x;
y=-y;
if(get2(x)!=get2(y)){
b[get2(x)]=get2(y);
}
}
int cnt1=0,cnt2=0;
for(int i=1;i<=n;i++){
if(get1(1)==get1(i)) cnt1++;
}
for(int i=1;i<=m;i++){
if(get2(1)==get2(i)) cnt2++;
}
printf("%d",min(cnt1,cnt2));
return 0;
}