A chessboard n × m in size is given. During the zero minute we repaint all the black squares to the 0 color. During the i-th minute we repaint to the i color the initially black squares that have exactly four corner-adjacent squares painted i - 1 (all such squares are repainted simultaneously). This process continues ad infinitum. You have to figure out how many squares we repainted exactly x times.

The upper left square of the board has to be assumed to be always black. Two squares are called corner-adjacent, if they have exactly one common point.

Input

The first line contains integers n and m (1 ≤ n, m ≤ 5000). The second line contains integer x (1 ≤ x ≤ 109).

Output

Print how many squares will be painted exactly x times.

Examples

Input

3 3
1


Output

4


Input

3 3
2


Output

1


Input

1 1
1


Output

1
#include <bits/stdc++.h>
clock_t startTime = clock();
using namespace std;
const double eps = 1e-9;
template <class T>
void print(const vector<T> &v) {
  ostringstream os;
  for (int i = 0; i < (int)v.size(); ++i) {
    if (i) os << ' ';
    os << v[i];
  }
  cout << os.str() << endl;
}
template <class T>
int sz(const T &c) {
  return (int)c.size();
}
template <class T>
void srt(T &c) {
  sort(c.begin(), c.end());
}
template <class T>
void checkmin(T &a, T b) {
  if (b < a) a = b;
}
template <class T>
void checkmax(T &a, T b) {
  if (b > a) a = b;
}
template <class T>
T sqr(T x) {
  return x * x;
}
template <class T, class U>
T cast(U x) {
  ostringstream os;
  os << x;
  T res;
  istringstream is(os.str());
  is >> res;
  return res;
}
template <class T>
vector<T> split(string s, string x = " ") {
  vector<T> res;
  for (int i = 0; i < s.size(); i++) {
    string a;
    while (i < (int)s.size() && x.find(s[i]) == string::npos) a += s[i++];
    if (!a.empty()) res.push_back(cast<T>(a));
  }
  return res;
}
template <class T>
bool inside(T r, T c, T R, T C) {
  return r >= 0 && r < R && c >= 0 && c < C;
}
int dr[] = {-1, 1, 1, -1};
int dc[] = {1, 1, -1, -1};
int main(int argc, char *argv[]) {
  int x;
  short R, C;
  cin >> R >> C >> x;
  vector<vector<int> > a(R, vector<int>(C));
  queue<pair<int, int> > q;
  for (int r(0), _n(R); r < _n; ++r) {
    for (int c(0), _n(C); c < _n; ++c) {
      if (((r + c) & 1) == 0 &&
          (r == 0 || c == 0 || r == R - 1 || c == C - 1)) {
        q.push(make_pair(r, c));
        a[r][c] = 1;
      }
    }
  }
  while (!q.empty()) {
    pair<int, int> cur = q.front();
    q.pop();
    int r = cur.first;
    int c = cur.second;
    for (int d(0), _n(4); d < _n; ++d) {
      short nr = r + dr[d];
      short nc = c + dc[d];
      if (inside(nr, nc, R, C) && a[nr][nc] == 0) {
        a[nr][nc] = a[r][c] + 1;
        q.push(make_pair(nr, nc));
      }
    }
  }
  int res = 0;
  for (int r(0), _n(R); r < _n; ++r) {
    for (int c(0), _n(C); c < _n; ++c) {
      if (a[r][c] == x) ++res;
    }
  }
  cout << res << endl;
  return 0;
}
