#include<bits/stdc++.h>
using namespace std;
int n,m,p,q,ans1,ans2,fa[114514],fa2[114514];
int find(int k){
if(fa[k]==k){
return k;
}else{
fa[k]=find(fa[k]);
return fa[k];
}
}
int find2(int k){
if(fa2[k]==k){
return k;
}else{
fa2[k]=find(fa2[k]);
return fa2[k];
}
}
void uni1(int x,int y){
fa[find(x)]=find(y);
}
void uni2(int x,int y){
fa2[find2(x)]=find2(y);
}
int main(){
cin >> n >> m >> p >> q;
for(int i=1;i<=n;i++){
fa[i]=i;
}
for(int i=1;i<=m;i++){
fa2[i]=i;
}
int x,y;
for(int i=1;i<=p;i++){
cin >> x >> y;
uni1(x,y);
}
for(int i=1;i<=q;i++){
cin >> x >> y;
x=-x;
y=-y;
uni2(x,y);
}
for(int i=1;i<=n;i++){
if(find(i)==find(1)) ans1++;
}
for(int i=1;i<=m;i++){
if(find2(i)==find2(1)) ans2++;
}
cout << min(ans1,ans2);
return 0;
}