#include <bits/stdc++.h>
using namespace std;
template <class T>
inline T bigmod(T b, T p, T m) {
  T ret;
  if (p == 0) return 1;
  if (p & 1) {
    ret = (bigmod(b, p / 2, m) % m);
    return ((b % m) * ret * ret) % m;
  } else {
    ret = (bigmod(b, p / 2, m) % m);
    return (ret * ret) % m;
  }
}
int dx4[] = {1, -1, 0, 0};
int dy4[] = {0, 0, 1, -1};
int dx6[] = {0, 0, 1, -1, 0, 0};
int dy6[] = {1, -1, 0, 0, 0, 0};
int dz6[] = {0, 0, 0, 0, 1, -1};
int dx8[] = {1, -1, 0, 0, -1, 1, -1, 1};
int dy8[] = {0, 0, 1, -1, 1, 1, -1, -1};
int dkx8[] = {-1, 1, -1, 1, -2, -2, 2, 2};
int dky8[] = {2, 2, -2, -2, 1, -1, 1, -1};
int tc = 1;
const double eps = 1e-9;
const double pi = acos(-1.0);
const long long int mx = 100;
const long long int mod = 1000000007;
bool visited[mx + 5][mx + 5];
int main() {
  long long i, j, k, n, m, a[mx + 5], p, q;
  while (cin >> n >> m >> k) {
    vector<pair<long long, long long> > indices;
    for (i = 1; i <= n; i++) {
      for (j = 1; j <= m; j++) scanf("%lld", &a[j]);
      for (p = 1; p <= m; p++) {
        for (q = p + 1; q <= m; q++) {
          if (k) {
            if (a[p] < a[q]) {
              visited[q][p] = true;
              swap(a[p], a[q]);
            }
          } else {
            if (a[p] > a[q]) {
              visited[p][q] = true;
              swap(a[p], a[q]);
            }
          }
        }
      }
    }
    for (i = 1; i <= m; i++) {
      for (j = 1; j <= m; j++) {
        if (visited[i][j]) indices.push_back(pair<long long, long long>(i, j));
      }
    }
    cout << indices.size() << "\n";
    for (i = 0; i < indices.size(); i++)
      cout << indices[i].first << " " << indices[i].second << "\n";
  }
  return 0;
}
