#include <bits/stdc++.h>
using namespace std;
int dp[4][1010][1010];
int a[1010][1010];
int n, m;
int dx[] = {0, 0, 1, -1};
int dy[] = {1, -1, 0, 0};
void upd(int x, int y, int v) {
  while ((x >= 0) && (y >= 0) && (x < n) && (y < m)) {
    if (a[x][y] == 1) {
      dp[v][x][y] = 1;
      int nx = x + dx[v ^ 1];
      int ny = y + dy[v ^ 1];
      if ((nx >= 0) && (nx < n) && (ny >= 0) && (ny < m))
        dp[v][x][y] += dp[v][nx][ny];
    } else
      dp[v][x][y] = 0;
    x += dx[v];
    y += dy[v];
  }
}
int calc(int x, int y, int v) {
  int nv1 = (v + 2) % 4;
  int nv2 = nv1 ^ 1;
  int cnt = 0;
  int val1 = 1000000000;
  int val2 = 1000000000;
  int res = 0;
  while ((x >= 0) && (y >= 0) && (x < n) && (y < m)) {
    cnt++;
    val1 = ((val1 < dp[nv1][x][y]) ? (val1) : (dp[nv1][x][y]));
    val2 = ((val2 < dp[nv2][x][y]) ? (val2) : (dp[nv2][x][y]));
    res = ((res < (val1 + val2 - 1) * cnt) ? ((val1 + val2 - 1) * cnt) : (res));
    x += dx[v];
    y += dy[v];
  }
  return res;
}
int main() {
  int q;
  scanf("%d%d%d", &n, &m, &q);
  for (int i = (0); i < (n); ++i)
    for (int j = (0); j < (m); ++j) {
      scanf("%d", &a[i][j]);
    }
  for (int i = (0); i < (n); ++i) {
    upd(i, 0, 0);
    upd(i, m - 1, 1);
  }
  for (int i = (0); i < (m); ++i) {
    upd(0, i, 2);
    upd(n - 1, i, 3);
  }
  for (int i = (0); i < (q); ++i) {
    int op, x, y;
    scanf("%d%d%d", &op, &x, &y);
    x--;
    y--;
    if (op == 1) {
      a[x][y] ^= 1;
      upd(x, 0, 0);
      upd(x, m - 1, 1);
      upd(0, y, 2);
      upd(n - 1, y, 3);
    } else {
      int res = 0;
      res = max(res, calc(x, y, 0));
      res = max(res, calc(x, y, 1));
      res = max(res, calc(x, y, 2));
      res = max(res, calc(x, y, 3));
      printf("%d\n", res);
    }
  }
  return 0;
}
