n, m, k = gets.split.map(&:to_i)
g = [0] * n

m.times do
	i, j = gets.split.map(&:to_i)
	i -= 1
	j -= 1
	g[i] |= (1 << j)
	g[j] |= (1 << i)
end

def f(graph, k)
	i = (0..graph.size-1).max_by {|i| graph[i].to_s(2).count(?1) }
	return k >= 0 ? k : -Float::INFINITY if graph[i] == 0
	return -Float::INFINITY if k <= 0

	g = graph.dup
	(0..graph.size-1).each do |j|
		g[j] -= (1 << i) if g[j][i] == 1
	end
	g[i] = 0
	max = f(g, k-1)

	g = graph.dup
	d = g[i].to_s(2).count(?1)
	return max if d > k

	mask = g[i] | (1 << i)
	(0..graph.size-1).each do |j|
		if mask[j] == 1
			g[i] = 0
		else
			g[i] -= g[i] & mask
		end
	end
	ret = f(g, k-d)

	return ret > max ? ret : max
end

loop do
	i = g.index {|x| x.to_s(2).count(?1) <= 1}
	break if !i
	if g[i].to_s(2).count(?1) == 0
		g.delete_at(i)
		g.map! do |x|
			l = (x >> i + 1)
			r = x & ((1 << i) - 1)
			(l << i) | r
		end
	else
		k -= 1
		(0..g.size-1).each do |j|
			g[j] -= (1 << i) if g[j][i] == 1
		end
		g[i] = 0
	end
end

c = f(g, k)
puts c >= 0 ? k - c : 'Impossible'