轻压
#include<cstdio>
#include<algorithm>
#define int long long
#define N 114514
using namespace std;
int tot,n,m,k,f[N],size[N],dp[N],val[N],ans=2147483647;
int find(int x){return x==f[x]?x:f[x]=find(f[x]);}
void combine(int x,int y){x=find(x),y=find(y);if(x==y)return;f[x]=y;size[y]+=size[x];size[x]=0;}
signed main(){
scanf("%lld%lld%lld",&n,&m,&k);
for(int i=1;i<=n;i++)f[i]=i,size[i]=1;
for(int i=1;i<=k;i++){int a,b;scanf("%lld%lld",&a,&b);combine(a,b);}
for(int i=1;i<=n;i++)if(size[i])val[++tot]=size[i];
for(int i=1;i<=tot;i++)for(int j=2*m;j>=val[i];j--)dp[j]=max(dp[j],dp[j-val[i]]+val[i]);
int mnp=2147483647;
for(int i=1;i<=2*m;i++){
if(mnp==abs(dp[i]-m))ans=min(ans,dp[i]);
if(mnp>abs(dp[i]-m))mnp=abs(dp[i]-m),ans=dp[i];
}
if(ans==2147483647)return puts("0"),0;
printf("%lld",ans);
return 0;
}