冰茶机(大雾
#include<bits/stdc++.h>
using namespace std;
const int N=100000;
int n,m,z,q,ans1,ans2;
map<int,int> f;
void into(){
for(int i=1 ; i<=N ; i++) f[i]=i;
}
int find(int x){
if(f[x]==x) return x;
else return f[x]=find(f[x]);
}
void merge(int x,int y){
f[find(x)]=find(y);
}
int main(){
cin>>n>>m>>z>>q;
for(int i=1 ; i<=z ; i++){
int x,y;
cin>>x>>y;
merge(x,y);
}
for(int i=1 ; i<=q ; i++){
int x,y;
cin>>x>>y;
merge(x,y);
}
for(int i=1 ; i<=n ; i++){
if(find(i)==find(1)) ans1++;
}
for(int i=1 ; i<=m ; i++){
if(find(0-i)==find(-1)) ans2++;
}
cout<<min(ans1,ans2);
return 0;
}