Problem:
Score : 200 points

Problem Statement

We have a grid with N rows and M columns of squares. Initially, all the squares are white.

There is a button attached to each row and each column.
When a button attached to a row is pressed, the colors of all the squares in that row are inverted; that is, white squares become black and vice versa.
When a button attached to a column is pressed, the colors of all the squares in that column are inverted.

Takahashi can freely press the buttons any number of times. Determine whether he can have exactly K black squares in the grid.

Constraints

1 \leq N,M \leq 1000

0 \leq K \leq NM

Input

Input is given from Standard Input in the following format:

N M K

Output

If Takahashi can have exactly K black squares in the grid, print Yes; otherwise, print No.

Sample Input 1

2 2 2

Sample Output 1

Yes

Press the buttons in the order of the first row, the first column.

Sample Input 2

2 2 1

Sample Output 2

No

Sample Input 3

3 5 8

Sample Output 3

Yes

Press the buttons in the order of the first column, third column, second row, fifth column.

Sample Input 4

7 9 20

Sample Output 4

No

Solution in Ruby (2.3.3) (judge verdict: Wrong Answer)

$n,$m,$k = gets.chomp.split(" ").map(&:to_i)

cell = Array.new($n).map{Array.new($m,0)}

$trial = 0

$bag = []
$bag << cell

def count(cell)
  black = 0
  cell.each do |c|
    black += c.count(1)
  end
  return black
end

def bfs(cell,button)
  cell = Marshal.load(Marshal.dump(cell))
  if button < $m
    cell.each do |c|
      c[button] = (c[button] == 0) ? 1 : 0
    end
  else
    cell[button - $m].map! do |c|
      c = (c == 0) ? 1 : 0
    end
  end

  # 遷移後
  if $bag.include?(cell)
    return nil
  end
  $bag << cell

  if count(cell) == $k
    puts "Yes"
    exit
  end

#  $trial += 1
#  if $trial > 1000
#    puts "No"
#    exit
#  end

#  ($n+$m).times do |i|
#    unless i == button
#      bfs(cell,i)
#    end
#  end

  return cell

end

n = $n
m = $m
cells = []
(n+m).times do |i|
    cells << bfs(cell,i)
end

#cells.each do |cell|
#  puts "---"
#  cell.each do |c|
#    puts c.join
#  end
#end

def solve(o)
  cells = []
  o.reject { |arr| arr.nil? }.each do |cell|
    ($n+$m).times do |i|
      cells << bfs(cell,i)
    end
  end
  return cells.reject{|arr| arr.nil?}
end

($n+$m).times do
  cells = solve(cells)
  if cells.all?{|cell| cell.nil?}
    puts "No"
    exit
  end
end

puts "No"