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
# puts g.map {|x| sprintf("%0#{n}b", x).reverse}

def f(graph, k)
    i = graph.index {|x| x > 0}
    return k >= 0 ? k : -Float::INFINITY if !i
    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)
    (0..graph.size-1).each do |j| 
        if g[j][i] == 1
            (0..graph.size-1).each do |k| 
                g[k] -= (1 << j) if g[k][j] == 1
            end 
            g[j] = 0 
        end 
    end 
    g[i] = 0 
    ret = f(g, k-d)
    return ret > max ? ret : max 
end

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