#include<bits/stdc++.h>
using namespace std;
#define fileIO(s) do {freopen(s".in", "r", stdin); freopen(s".out", "w", stdout);} while(false)
#define endl '\n'
constexpr int N = 1e5 + 10;
int f1[N],f2[N];
void init(int f[],int x){
for(int i = 1;i <= x;i ++){
f[i] = i;
}
return ;
}
int find(int f[],int x){
return f[x] == x ? x : f[x] = find(f,x);
}
void merge(int f[],int x,int y){
if(find(f,x) != find(f,y)) f[find(f,x)] = find(f,y);
return ;
}
int main(){
cin.tie(nullptr),cout.tie(nullptr);
int n,m,p,q,x,y;
cin >> n >> m >> p >> q;
init(f1,n);
init(f2,m);
for(int i = 1;i <= p;i ++){
cin >> x >> y;
merge(f1,x,y);
}
for(int i = 1;i <= q;i ++){
cin >> x >> y;
merge(f2,abs(x),abs(y));
}
int ans1 = 0,ans2 = 0;
for(int i = 1;i <= n;i ++){
if(find(f1,i) == find(f1,1)){
ans1 ++;
}
}
for(int i = 1;i <= m;i ++){
if(find(f2,i) == find(f2,1)){
ans2 ++;
}
}
cout << min(ans1 , ans2) << endl;
return 0;
}