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 C++ (GCC 9.2.1) (judge verdict: Wrong Answer)

#include<bits/stdc++.h>
#define rep(i,n) for(int i = 0; i < n; i++)
#define vi vector<int>
#define all(x) (x).begin(),(x).end()
#define INF (1<<30)-1
using ll = long long;
using namespace std;
template<class T>bool chmax(T &a, const T &b){ if(a<b) { a=b; return 1; } return 0; }
template<class T>bool chmin(T &a, const T &b){ if(b<a) { a=b; return 1; } return 0; }

int main(){
  int n,m,k; cin >> n >> m >> k;
  bool ok = false;
  int yoko = ceil(k/n);
  int res = n*yoko;
  rep(i,n){
    if(res == k){
      ok = true;
      break;
    }else if(k < res){
      res -= yoko;
      res += m-yoko;
    }else if(res < k){
      res -= i+1;
      res += n-i+1;
      yoko++;
    }
  }
  int tate = ceil(k/m);
  res = m*tate;
  rep(i,m){
    if(res == k){
      ok = true;
      break;
    }else if(k < res){
      res -= tate;
      res += n-tate;
    }else if(res < k){
      res -= i+1;
      res += m-i+1;
      tate++;
    }
  }
  if(ok) cout << "Yes";
  else cout << "No";
  cout << "\n";
  return 0;
}