n = gets.chomp.to_i c = gets.chomp.to_i v = gets.chomp.to_i s = gets.chomp.split(' ') t = gets.chomp.split(' ') y = gets.chomp.split(' ') m = gets.chomp.split(' ') matrix = {} sum_m = {} sum_m[1] = [0, 0] (1..v).each do |i| matrix[[s[i - 1].to_i, t[i - 1].to_i]] = [y[i - 1].to_i, m[i - 1].to_i] end #p matrix.sort (1...n).each do |i| next if !sum_m.key?(i) (i+1..n).each do |j| next if !matrix.key?([i, j]) #print "#{i},#{j}\n" if !sum_m.key?(j) sum_m[j] = [c, 1000] end if sum_m[j][1] > sum_m[i][1] + matrix[[i, j]][1] && sum_m[i][0] + matrix[[i, j]][0] <= c sum_m[j] = [sum_m[i][0] + matrix[[i, j]][0], sum_m[i][1] + matrix[[i, j]][1]] end #p sum_m end end if !sum_m.key?(n) || sum_m[n][1] == 1000 puts '-1' else puts sum_m[n][1] end