#include<stdio.h>
#include<stdlib.h>
int n,m,p,q,x,y;
int faN[10001],faM[10001],rankN[10001],rankM[10001];
int find(int x)
{
if(x<0)
{
x=abs(x);
return x==faM[x]?x:(faM[x]=find(-faM[x]));
}
else
return x==faN[x]?x:(faN[x]=find(faN[x]));
}
void merge(int x,int y)
{
int i,j;
i=find(x);
j=find(y);
if(x<0||y<0)
{
if(rankM[i]<rankM[j])
faM[i]=j;
else
faM[j]=i;
if(rankM[i]==rankM[j]&&i!=j)
{
rankM[i]++;
}
}
else
{
if(rankN[i]<rankN[j])
faN[i]=j;
else
faN[j]=i;
if(rankN[i]==rankN[j]&&i!=j)
{
rankN[i]++;
}
}
}
int main()
{
int i,man=0,woman=0;
scanf("%d%d%d%d",&n,&m,&p,&q);
for(i=1;i<=n;i++)
{
faN[i]=i;
rankN[i]=1;
}
for(i=1;i<=m;i++)
{
faM[i]=i;
rankM[i]=1;
}
for(i=0;i<p;i++)
{
scanf("%d%d",&x,&y);
merge(x,y);
}
for(i=0;i<q;i++)
{
scanf("%d%d",&x,&y);
merge(x,y);
}
x=find(1);
y=find(-1);
for(i=1;i<=n;i++)
{
if(faN[i]==x)
man++;
}
for(i=1;i<=m;i++)
{
if(faM[i]==y)
woman++;
}
printf("%d\n",man<woman?man:woman);
return 0;
}