#include <bits/stdc++.h>
using namespace std;
inline int in() {
  int32_t x;
  scanf("%d", &x);
  return x;
}
inline string getStr() {
  char ch[1001];
  scanf("%s", ch);
  return ch;
}
inline char getCh() {
  char ch;
  scanf(" %c", &ch);
  return ch;
}
template <class P, class Q>
inline P smin(P &a, Q b) {
  if (b < a) a = b;
  return a;
}
template <class P, class Q>
inline P smax(P &a, Q b) {
  if (a < b) a = b;
  return a;
}
const int MOD = 1e9 + 7;
const int MAX_N = 200 + 10;
const int MAX_LG = 21;
const int base = 29;
const int MAX_DIF = 5005;
int res = 0;
vector<pair<int, int>> st;
bool vis[MAX_N][MAX_N];
pair<int, int> mv[4] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
int32_t main() {
  int n = in(), m = in(), k = in();
  priority_queue<pair<int, pair<int, int>>> pq;
  pq.push({0, {0, 0}});
  while (pq.empty() == false && k) {
    int X = pq.top().second.first;
    int Y = pq.top().second.second;
    int cost = -pq.top().first;
    pq.pop();
    if (vis[X][Y]) continue;
    vis[X][Y] = true;
    res += cost + 1;
    k--;
    st.push_back({X + 1, Y + 1});
    for (int i = 0; i < 4; i++) {
      int x2 = X + mv[i].first;
      int y2 = Y + mv[i].second;
      if (x2 >= 0 && x2 < n && y2 >= 0 && y2 < m && vis[x2][y2] == false) {
        pq.push({-cost - 1, {x2, y2}});
      }
    }
  }
  cout << res << "\n";
  sort(st.begin(), st.end());
  for (int i = (int)st.size() - 1; i >= 0; i--) {
    int curX = 1, curY = 1;
    int x = st[i].first, y = st[i].second;
    while (curX <= x && curY <= y) {
      printf("(%d,%d) ", curX, curY);
      if (curX < x) {
        curX++;
      } else if (curY < y) {
        curY++;
      } else {
        break;
      }
    }
    printf("\n");
  }
}
