Gx,Gy,N,F=gets.split.map &:to_i M=N.times.map{gets.split.map(&:to_i)} a=(Gy+1).times.map{|y|(Gx+1).times.map{|x|y*F+x*F}} e=[[0,0,0]] M.each{|c| h={} e.each{|v| x,y,z=v[0]+c[0],v[1]+c[1],v[2]+c[2] next if x>Gx||y>Gy if a[y][x]>z h[y*1000+x]=[x,y,z] (Gy-y+1).times{|ny| (Gx-x+1).times{|nx| nz=z+nx*F+ny*F if a[y+ny][x+nx]>nz a[y+ny][x+nx]=nz end } } end } e.concat h.values } p a[Gy][Gx]