#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int N = 1e6 + 5;
vector<long long> vec[N];
bool vst[N];
long long a[N];
long long ind = 0;
long long tmp = 0;
void dfs(int v) {
  vst[v] = true;
  tmp++;
  for (long long i = 0; i < vec[v].size(); i++) {
    if (!vst[vec[v][i]]) {
      dfs(vec[v][i]);
    }
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  long long n, m, k;
  cin >> n >> m >> k;
  long long x, y;
  for (long long i = 0; i < m; i++) {
    cin >> x >> y;
    vec[x].push_back(y);
    vec[y].push_back(x);
  }
  for (long long i = 1; i <= n; i++) {
    if (!vst[i]) {
      dfs(i);
      a[ind++] = tmp;
      tmp = 0;
    }
  }
  long long soc = 0;
  for (long long i = 0; i < ind; i++) {
    if (a[i] == 1) soc++;
  }
  if (k == 1) {
    if (ind > 1) {
      cout << ind - 2;
    } else
      cout << 0;
    return 0;
  }
  soc -= 2;
  long long sumd = 0;
  for (long long i = 0; i < ind; i++) {
    if (a[i] > 2) sumd += min(a[i] - 2, k - 2);
  }
  soc -= sumd;
  if (soc <= 0) {
    cout << 0;
    return 0;
  }
  long long ans;
  if (soc % 2 == 0) {
    ans = soc / 2;
  } else {
    ans = (soc / 2) + 1;
  }
  cout << ans;
  return 0;
}
