#include <bits/stdc++.h>
using namespace std;
struct pt {
  int x, y;
  pt() : x(0), y(0) {}
  pt(int x, int y) : x(x), y(y) {}
};
pt operator+(const pt &p1, const pt &p2) {
  return pt(p1.x + p2.x, p1.y + p2.y);
}
pt operator-(const pt &p1, const pt &p2) {
  return pt(p1.x - p2.x, p1.y - p2.y);
}
int n, m, k;
bool used[301][301];
bool isvalid(pt p) { return 1 <= p.x && p.x <= n && 1 <= p.y && p.y <= m; }
pt getnext(pt p) {
  pt right = p + pt(0, 1);
  if (isvalid(right) && !used[right.x][right.y]) {
    used[right.x][right.y] = true;
    return right;
  }
  pt left = p + pt(0, -1);
  if (isvalid(left) && !used[left.x][left.y]) {
    used[left.x][left.y] = true;
    return left;
  }
  pt down = p + pt(1, 0);
  if (isvalid(down) && !used[down.x][down.y]) {
    used[down.x][down.y] = true;
    return down;
  }
  return pt(-1, -1);
}
vector<pt> st;
int main() {
  scanf("%d %d %d", &n, &m, &k);
  pt p = pt(1, 0);
  --k;
  while (1) {
    p = getnext(p);
    if (p.x == -1) {
      break;
    }
    st.push_back(p);
    if (k && st.size() == 2) {
      printf("2 %d %d %d %d\n", st[0].x, st[0].y, st[1].x, st[1].y);
      st.clear();
      --k;
    }
  }
  printf("%d ", (int)((st).size()));
  for (int i = 0; i < (int)((st).size()); ++i) {
    printf("%d %d ", st[i].x, st[i].y);
  }
}
