RT
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int b[N+10]{},g[N+10]{};
int aaa(int x){
if(b[x]==x){
return x;
}
return b[x]=aaa(b[x]);
}
int bbb(int x){
if(g[x]==x){
return x;
}
return g[x]=bbb(g[x]);
}
int main(){
int n,m,p,q;
scanf("%d%d%d%d",&n,&m,&p,&q);
for(int i=1;i<=n;i++){
b[i]=i;
}
for(int i=1;i<=m;i++){
g[i]=i;
}
int bx[p+10],by[p+10]{},gx[p+10]{},gy[p+10]{};
for(int i=1;i<=p;i++){
int x,y;
scanf("%d%d",&x,&y);
bx[i]=x;
by[i]=y;
}
for(int i=1;i<=q;i++){
int x,y;
scanf("%d%d",&x,&y);
gx[i]=x;
gy[i]=y;
}
for(int i=1;i<=p;i++){
b[bx[i]]=aaa(bx[i]),b[by[i]]=aaa(by[i]);
if(b[bx[i]]>b[by[i]]){
swap(b[bx[i]],b[by[i]]);
}
b[by[i]]=b[bx[i]];
}
for(int i=1;i<=q;i++){
g[abs(gx[i])]=bbb(abs(gx[i])),g[abs(gy[i])]=bbb(abs(gy[i]));
if(g[abs(gx[i])]>g[abs(gy[i])]){
swap(g[abs(gx[i])],g[abs(gy[i])]);
}
g[abs(gy[i])]=g[abs(gx[i])];
}
int s1=0,s2=0;
for(int i=1;i<=n;i++){
if(aaa(i)==aaa(1)){
s1++;
}
}
for(int i=1;i<=m;i++){
if(bbb(i)==bbb(1)){
s2++;
}
}
printf("%d",min(s1,s2));
return 0;
}