#include<bits/stdc++.h>
using namespace std;
int n,m,k,f[1000001],dp[1000001],s[1000001],w[1000001],v,minn=INT_MAX,q;
inline int find(int x)
{
if(f[x]==x) return x;
return f[x]=find(f[x]);
}
int main()
{
cin>>n>>m>>k;
for(int i=1;i<=n;i++) f[i]=i,s[i]=1;
while(k--)
{
int a,b;
scanf("%d%d",&a,&b);
if(find(a)==find(b)) continue;
f[find(a)]=find(b);
s[b]+=s[a];
}
for(int i=1;i<=n;i++)
if(f[i]==i) w[++v]=s[i];
for(int i=1;i<=v;i++)
for(int j=m+m;j>=w[i];j--) dp[j]=max(dp[j],dp[j-w[i]]+w[i]);
for(int i=1;i<=m+m;i++)
if(minn>abs(dp[i]-m)) minn=abs(dp[i]-m),q=dp[i];
cout<<q;
}/*10 4 9
8 2
1 5
5 10
9 7
10 3
3 4
4 6
8 9
6 8*/