N, M, K = gets.split.map(&:to_i) A = N.times.map { gets.split.map(&:to_i) } dp = Array.new(N + 2) { Array.new(K + 1, false) } dp[0][0] = true N.times do |i| 0.upto(K) do |k| next if !dp[i][k] A[i].each do |m| nk = k + m next if K < nk dp[i + 1][nk] = true end end end ans = Float::INFINITY 0.upto(K) do |k| next if !dp[N][k] ans = [ans, K - k].min end if ans == Float::INFINITY puts -1 else puts ans end