#!/usr/bin/env ruby INF = 10**18 + 1; n, m = gets.split.map(&:to_i) as = gets.split.map(&:to_i) ks = gets.split.map(&:to_i) lim = as[-1] dp = [] loop do dp = (0 .. lim).map{ INF } dp[0] = 0 as.each do |a| a.upto(lim) do |x| if dp[x] > dp[x - a] + 1 dp[x] = dp[x - a] + 1 end end end if lim >= as[-1] then ok = true lim.downto(lim - as[-1]) do |x| ok &&= (dp[x] == INF || dp[x] == dp[x - as[-1]] + 1) end if ok then break end end lim <<= 1 end STDERR.puts lim target = -m n.times do |i| target += as[i] * ks[i]; end if target < 0 ans = INF elsif target < lim ans = dp[target] else greed = ((target - lim) + as[-1] - 1) / as[-1] ans = greed + dp[target - as[-1] * greed] end if ans >= INF p -1 else p ans end