#include<bits/stdc++.h>
using namespace std;
//数组大小
const short ArrSize=2e4+10;
//题目给定数据
short n,m;
short p,q;
//并查集
short ManFriend[ArrSize];
short WomanFriend[ArrSize];
//每个并查集中和小明和小红有关系的人的数量
short XiaomingFriend=0,XiaohongFriend=0;
short InputTmp1,InputTmp2;
//查找根节点变量
int FindManRoot(short Node){
//如果某元素的父是他自己,找到了根,否则继续寻找
if(ManFriend[Node]==Node) return Node;
//路径压缩,找到 Node的根之后,让Node的父直接指向Node的根
else return ManFriend[Node]=FindManRoot(ManFriend[Node]);
}
int FindWomanRoot(short Node){
if(WomanFriend[Node]==Node) return Node;
else return WomanFriend[Node]=FindWomanRoot(WomanFriend[Node]);
}
int main(){
//输入
cin>>n>>m>>p>>q;
//初始化
for(int i=1;i<=n;i++) ManFriend[i]=i;
//输入盆友关系
for(int i=1;i<=p;i++){
//输入辅助变量
cin>>InputTmp1>>InputTmp2;
ManFriend[InputTmp2]=InputTmp1;
}
//查找根节点,计数共有多少个盆友
for(int i=1;i<=n;i++)FindManRoot(ManFriend[i]);
for(int i=1;i<=n;i++)
if(ManFriend[i]==1) XiaomingFriend++;
//同样处理小红的公司
for(int j=1;j<=m;j++) WomanFriend[j]=j;
for(int j=1;j<=q;j++){
cin>>InputTmp1>>InputTmp2;
InputTmp1=-InputTmp1;
InputTmp2=-InputTmp2;
WomanFriend[InputTmp2]=InputTmp1;
}
for(int j=1;j<=m;j++)FindWomanRoot(WomanFriend[j]);
for(int j=1;j<=m;j++)
if(WomanFriend[j]==1)XiaohongFriend++;
//输出结果(朋友最少的那个人(小明或小红))
if(XiaomingFriend>=XiaohongFriend)
cout<<XiaohongFriend;
else
cout<<XiaomingFriend;
return 0;
}