#include <bits/stdc++.h>
using namespace std;
const int MAXN = 20, mod = 1000000007;
const int kombX[4] = {0, 0, 1, -1};
const int kombY[4] = {1, -1, 0, 0};
inline int add(int a, int b) { return (a + b) % mod; }
inline int mul(int a, int b) { return ((long long int)a * b) % mod; }
int n, m, q, trenutno = 1, N;
int mat[MAXN][MAXN];
int stanje[MAXN][MAXN];
int glavna[MAXN][MAXN], prijelaz[MAXN][MAXN], pomoc[MAXN][MAXN];
void postavi() {
  N = n * m;
  stanje[0][0] = 1;
}
int moze(int x, int y) {
  if (x < 0 || y < 0 || x >= n || y >= m) return 0;
  if (mat[x][y]) return 0;
  return 1;
}
void slozi() {
  memset(glavna, 0, sizeof(glavna));
  for (int i = 0; i < N; i++) glavna[i][i] = 1;
  memset(prijelaz, 0, sizeof(prijelaz));
  for (int i = 0; i < N; i++) {
    int x = i / m;
    int y = i % m;
    if (mat[x][y] == 1) continue;
    prijelaz[i][i] = 1;
    for (int j = 0; j < 4; j++) {
      int kamo_x = x + kombX[j];
      int kamo_y = y + kombY[j];
      if (moze(kamo_x, kamo_y)) {
        int v = kamo_x * m + kamo_y;
        prijelaz[i][v] = 1;
      }
    }
  }
}
void mnozi(int a[MAXN][MAXN], int b[MAXN][MAXN]) {
  memset(pomoc, 0, sizeof(pomoc));
  for (int i = 0; i < N; i++)
    for (int j = 0; j < N; j++)
      for (int k = 0; k < N; k++)
        pomoc[i][j] = add(pomoc[i][j], mul(a[i][k], b[k][j]));
  for (int i = 0; i < N; i++)
    for (int j = 0; j < N; j++) a[i][j] = pomoc[i][j];
}
void potenciraj(int x) {
  while (x) {
    if (x & 1) mnozi(glavna, prijelaz);
    mnozi(prijelaz, prijelaz);
    x /= 2;
  }
}
void obradi(int t) {
  slozi();
  potenciraj(t - trenutno);
  trenutno = t;
  mnozi(stanje, glavna);
}
int upit(int x, int y, int t) {
  obradi(t);
  int ret = 0;
  int trebam = x * m + y;
  return stanje[0][trebam];
}
void dodaj(int x, int y, int t) {
  obradi(t);
  mat[x][y] = 1;
}
void makni(int x, int y, int t) {
  obradi(t);
  mat[x][y] = 0;
}
int main() {
  scanf("%d %d %d", &n, &m, &q);
  postavi();
  for (int br = 0; br < q; br++) {
    int tip;
    scanf("%d", &tip);
    int x, y, t;
    scanf("%d %d %d", &x, &y, &t);
    x--;
    y--;
    if (tip == 1)
      printf("%d\n", upit(x, y, t));
    else if (tip == 2)
      dodaj(x, y, t);
    else if (tip == 3)
      makni(x, y, t);
  }
  return 0;
}
