#include<bits/stdc++.h>
#define ll long long
#define maxn 10010
using namespace std;
int n,m,k;
struct edge
{
int end,next;
}e[maxn];
int tot;
int head[maxn];
void add(int x,int y)
{
e[++tot].next=head[x];
e[tot].end=y;
head[x]=tot;
}
int color[maxn];
int cnt=0;
void dfs(int now)
{
color[now]=cnt;
for (int i=head[now];i;i=e[i].next)
{
int to=e[i].end;
if (!color[to])
dfs(to);
}
}
void subtask1()
{
for (int i=1;i<=n;i++)
if(!color[i])
cnt++,dfs(i);
cout<<cnt<<endl;
}
bool vis[maxn];
bool dfss(int baba,int now)
{
vis[now]=1;
for (int i=head[now];i;i=e[i].next)
{
int to=e[i].end;
if (to!=baba&&!vis[to])
return dfs(now,to);
if (to!=baba&&vis[to])
return true;
}
return false;
}
bool forest()
{
for (int i=1;i<=n;i++)
if(!vis[i])
if (dfss(0,i))
return false
else
cnt++;
cout<<cnt+k;
return true;
}
int main()
{
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
cin>>n>>m>>k;
for (int i=1;i<=m;i++)
{
int a,b,;
scanf("%d%d",&a,&b);
add(a,b);
add(b,a);
}
if (k==0)
{
subtask1();
return 0;
}
if (forest())
{
return 0;
}
return 0;
}