// Arup Guha
// 12/27/2024
// Solution to 2024 SER D1/D2 Problem G: Intergalactic Team

import java.util.*;
import java.io.*;

public class intergalacticteam {

	public static void main(String[] args) throws Exception {
	
		// Get basic parameters.
		BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer tok = new StringTokenizer(stdin.readLine());
		int n = Integer.parseInt(tok.nextToken());
		int m = Integer.parseInt(tok.nextToken());
		int k = Integer.parseInt(tok.nextToken());
		
		// Set up graph.
		ArrayList<Integer>[] g = new ArrayList[n];
		for (int i=0; i<n; i++)
			g[i] = new ArrayList<Integer>();
		
		// We need this info.
		int[] totdeg = new int[n];
			
		// Read this in.
		for (int i=0; i<m; i++) {
			tok = new StringTokenizer(stdin.readLine());
			int u = Integer.parseInt(tok.nextToken()) - 1;
			int v = Integer.parseInt(tok.nextToken()) - 1;
			g[u].add(v);
			g[v].add(u);
			totdeg[u]++; totdeg[v]++;
		} 
		
		// Just look for connected components and also count full connections.
		boolean[] used = new boolean[n];
		int res = 0;
		for (int i=0; i<n; i++) {
			if (used[i]) continue;
			
			boolean works = bfsWorks(g, i, used, k, totdeg);
			if (works) res++;
		}
		
		// Ta da!
		System.out.println(res);
	}
	
	// Returns true iff the component that u's in has sz vertices each with degree sz-1.
	public static boolean bfsWorks(ArrayList<Integer>[] ng, int u, boolean[] used, int sz, int[] deg) {
	
		// Set up BFS.
		ArrayList<Integer> parts = new ArrayList<Integer>();
		used[u] = true;
		parts.add(u);
		ArrayDeque<Integer> q = new ArrayDeque<Integer>();
		q.offer(u);
		
		// Run it.
		while (q.size() > 0) {
		
			int cur = q.poll();
			
			// Go to neighbors.
			for (Integer next: ng[cur]) {
			
				// Been here.
				if (used[next]) continue;
				
				// Mark it add to component.
				used[next] = true;
				parts.add(next);
				q.offer(next);
			}
		} // end bfs.
		
		// This has to match.
		if (parts.size() != sz) return false;
		
		// And the subgraph has to be complete. (Remember we added edges both ways.
		for (Integer x: parts)
			if (deg[x] != 2*(sz-1))
				return false;
				
		// It works if we get here.
		return true;
	}
}