#include<bits/stdc++.h>
#define int long long
#define double long double
#define INF INT_MAX
using namespace std;
const int maxn=2e5+5,maxnn=5e3+5;
int n,m,q,k;
int f[maxn],sum[maxn],flag[maxnn][maxnn];
int find(int x) {
if(f[x]==x) return x;
else return f[x]=find(f[x]);
}
struct node {
int man,woman;
#define a1(i) a[i].man
#define a2(i) a[i].woman
#define b1(i) b[i].man
#define b2(i) b[i].woman
} a[maxn],b[maxn];
signed main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin>>n>>m>>k>>q;
for(int i=1; i<=n; i++) f[i]=i;
for(int i=1; i<=m; i++) cin>>a1(i)>>a2(i);
for(int i=1; i<=q; i++) {
cin>>b1(i)>>b2(i);
f[find(b1(i))]=find(b2(i));
}
for(int i=1; i<=m; i++) {
if(!flag[find(a1(i))][find(a2(i))]) {
sum[find(a1(i))]++;
flag[find(a1(i))][find(a2(i))]=1;
}
}
int ans=-INF;
for(int i=1;i<=n;i++) ans=max(ans,sum[i]);
cout<<min(ans+k,n)<<endl;
return 0;
}