#include <bits/stdc++.h>
using namespace std;
int n, m, k;
int goal[101];
vector<vector<pair<int, int> > > res;
vector<pair<int, int> > vs;
vector<pair<int, int> > wtf;
void go(int x, int y, int goal) {
  vs.push_back(pair<int, int>(x, y));
  if (y == goal) {
    res.push_back(vs);
    vs.pop_back();
    return;
  }
  go(x, y + 1, goal);
  res.push_back(vs);
  vs.pop_back();
}
int main() {
  scanf("%d %d %d", &n, &m, &k);
  int to;
  bool flag = false;
  if (m > n) flag = true, swap(n, m);
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      wtf.push_back(pair<int, int>(i, j));
    }
  }
  sort(wtf.begin(), wtf.end(), [](pair<int, int> a, pair<int, int> b) {
    return a.first + a.second < b.first + b.second;
  });
  to = 0;
  int cnt = 0;
  memset(goal, -1, sizeof(goal));
  while (cnt < k) {
    pair<int, int> p = *wtf.begin();
    wtf.erase(wtf.begin());
    cnt++;
    goal[p.first] = p.second;
    to = max(to, p.first);
  }
  for (int i = 0; i <= to; i++) vs.push_back(pair<int, int>(i, 0));
  for (int i = to; i >= 0; i--) {
    vs.pop_back();
    if (goal[i] >= 0) go(i, 0, goal[i]);
  }
  int tot = 0;
  for (int i = 0; i < (int)res.size(); i++) {
    tot += (int)res[i].size();
  }
  printf("%d\n", tot);
  for (int i = 0; i < (int)res.size(); i++) {
    for (int j = 0; j < (int)res[i].size(); j++) {
      if (flag) swap(res[i][j].first, res[i][j].second);
      printf("(%d,%d) ", res[i][j].first + 1, res[i][j].second + 1);
    }
    puts("");
  }
  return 0;
}
