def g;gets.split.map &:to_i;end
def f m,l
#p [m,l]
#puts m.map{|i|i*" "}
#puts 
d=0
(n,v=l[0];v)?(1..v).flat_map{|i|
  v%i==0&&(
    j=v/i
    y,x=$o[n]
    (y-i+1..y).flat_map{|t|
      t>=0&&m[t+i-1]&&(x-j+1..x).flat_map{|u|
        u>=0&&m[t][u+j-1]&&
        m[t,i].all?{|k|
          k[u,j].all?{|z|z==0||z==n}
        }&&(
          d=m.map{|k|k.dup}
          d[t,i]=d[t,i].map{|k|k[u,j]=[n]*j;k}
          f d,l[1..-1]
        )
      }
    }
  )
}.select{|i|i}:!m.flatten.index(0)&&[m]
end
while(x,y,n=g;x>0)
l=(1..n).map{g}
$o=[]
m=(1..y).map{|i|j=0;g.each{|c|c>0&&$o[c]=[i-1,j];j+=1}}
a=f m,l
#p a.size
#p a
puts a.size==1?a[0].map{|i|i*" "}:"NA"
end