firewall = Hash[ARGF.read.strip.scan(/(\d+): (\d+)/).map {|x| x.map(&:to_i) }]
def caught?(time, range)
(time % (2 * (range - 1))).zero?
end
p firewall.select {|depth, range| caught?(depth, range) }.map {|d,r| d * r }.sum
p (1..Float::INFINITY).find {|delay|
firewall.none? {|depth, range| caught?(delay+depth, range) }
}