#include <bits/stdc++.h>
using namespace std;
vector<int> g[1000000];
bool v[1000000];
long long dfs(int i) {
  v[i] = true;
  long long ans = 1;
  for (int j = 0; j < g[i].size(); j++)
    if (!v[g[i][j]]) {
      ans += dfs(g[i][j]);
    }
  return ans;
}
long long n, m, k;
int main() {
  cin >> n >> m >> k;
  for (int i = 0; i < m; i++) {
    long long p, q;
    cin >> p >> q;
    g[p - 1].push_back(q - 1);
    g[q - 1].push_back(p - 1);
  }
  if (k == 1) {
    for (int i = 0; i < n; i++) v[i] = false;
    int ans = 0;
    for (int i = 0; i < n; i++)
      if (!v[i]) {
        ++ans;
        dfs(i);
      }
    ans -= 2;
    if (ans < 0) ans = 0;
    cout << ans << endl;
    return 0;
  } else {
    if (n == 1) {
      cout << 0;
      return 0;
    }
    long long res = 0;
    long long t = 2;
    for (int i = 0; i < n; i++) v[i] = false;
    for (int i = 0; i < n; i++)
      if (!v[i]) {
        long long tmp = dfs(i);
        if (tmp == 1)
          ++res;
        else {
          t += min(tmp, k) - 2;
        }
      }
    res -= t;
    if (res < 0) res = 0;
    res = (res + 1) / 2;
    cout << res << endl;
    return 0;
  }
  return 0;
}
