#include <bits/stdc++.h>
using namespace std;
namespace variables {
struct triple {
  long long first, second, third;
};
struct node {
  long long val, l, r;
  node* parent;
  node* children[2];
};
}  // namespace variables
using namespace variables;
void debug(set<long long> _var, string _name = "") {
  cerr << "Debug #set " << _name << " = [";
  for (auto it : _var) cerr << it << ",";
  cerr << "END] : "
       << "size = " << _var.size() << "\n\n";
}
void light_debug(set<long long> _var, string _name = "") {
  cerr << "Debug #set " << _name << " = [";
  for (auto it : _var) cerr << it << ",";
  cerr << "END]\n\n";
}
void debug(map<long long, long long> _var, string _name = "") {
  cerr << "Debug #map (size = " << _var.size() << ")\n";
  for (auto it : _var)
    cerr << _name << "[" << it.first << "] = " << it.second << '\n';
}
void light_debug(map<long long, long long> _var, string _name = "") {
  cerr << "Debug #map \n";
  for (auto it : _var)
    cerr << _name << "[" << it.first << "] = " << it.second << '\n';
}
void debug(deque<long long> _var, string _name = "") {
  cerr << "Debug #deque " << _name << " = [";
  for (auto it : _var) cerr << it << ",";
  cerr << "END] : "
       << "size = " << _var.size() << "\n\n";
}
void light_debug(deque<long long> _var, string _name = "") {
  cerr << "Debug #deque " << _name << " = [";
  for (auto it : _var) cerr << it << ",";
  cerr << "END]\n\n";
}
void debug(vector<long long> _var, string _name = "") {
  cerr << "Debug #vector " << _name << " = [";
  for (auto it : _var) cerr << it << ",";
  cerr << "END] : "
       << "size = " << _var.size() << "\n\n";
}
void light_debug(vector<long long> _var, string _name = "") {
  cerr << "Debug #vector " << _name << " = [";
  for (auto it : _var) cerr << it << ",";
  cerr << "END]\n\n";
}
void debug(string _var, string _name = "") {
  cerr << "Debug #string " << _name << " = ";
  cerr << '"' << _var << '"';
  cerr << " : "
       << "size = " << _var.size() << "\n\n";
}
void light_debug(string _var, string _name = "") {
  cerr << "Debug #string : " << _name << " = " << '"' << _var << '"' << "\n\n";
}
void debug(long long _var, string _name = "") {
  cerr << "Debug #int64 : " << _name << " = " << _var << "\n\n";
}
void debug(unsigned long long _var, string _name = "") {
  cerr << "Debug #uint64 : " << _name << " = " << _var << "\n\n";
}
void debug(unsigned int _var, string _name = "") {
  cerr << "Debug #uint32 : " << _name << " = " << _var << "\n\n";
}
void debug(int _var, string _name = "") {
  cerr << "Debug #int32 : " << _name << " = " << _var << "\n\n";
}
void debug(char _var, string _name = "") {
  cerr << "Debug #char : " << _name << " = '" << _var << "\n\n";
}
void debug(bool _var, string _name = "") {
  cerr << "Debug #Boolean : " << _name << " = " << (_var ? "1 True" : "0 False")
       << "\n\n";
}
void testt();
namespace cf_utilities {
inline void multipleTests() {
  long long __test_count;
  cin >> __test_count;
  while (__test_count--) testt();
}
inline void fastIO() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
}
}  // namespace cf_utilities
namespace compare {
template <char _cmp>
bool compare(long long a, long long b) {
  if (_cmp == '>')
    return a > b;
  else
    return a < b;
}
template <char _cmp1 = '<', char _cmp2 = '<'>
bool compair(pair<long long, long long> a, pair<long long, long long> b) {
  return compare<_cmp1>(a.first, b.first) ||
         (a.first == b.first && compare<_cmp2>(a.second, b.second));
}
struct objcompair {
  template <char _cmp1 = '<', char _cmp2 = '<'>
  bool operator()(pair<long long, long long> a, pair<long long, long long> b) {
    return compare<_cmp1>(a.first, b.first) ||
           (a.first == b.first && compare<_cmp2>(a.second, b.second));
  }
};
}  // namespace compare
namespace bin {
long long trailingZeroes(long long x) {
  if (x == 0) return 0;
  return (x & 1 ? 0 : 1 + trailingZeroes(x / 2));
}
long long trailingOnes(long long x) {
  if (x == 0) return 0;
  return (x & 1 ? 1 + trailingZeroes(x / 2) : 0);
}
long long trailingPowerOfTwo(long long x) { return 1ll << trailingZeroes(x); }
long long popCount(long long x) {
  if (x == 0) return x;
  return 1 + popCount(x & (x - 1));
}
}  // namespace bin
namespace math {
const long long MOD = 998244353, MODalt = 1000000007;
long long binPow(long long _num, long long _exponent, long long _mod = MOD) {
  if (_exponent == 0) return 1;
  long long _half = binPow(_num, _exponent / 2, _mod);
  return _half * _half % _mod * (_exponent & 1 ? _num : 1) % _mod;
}
long long modularInverse(long long _x, long long _mod = MOD) {
  return binPow(_x, _mod - 2, _mod);
}
long long comb(long long _n, long long _k, long long _mod = MOD) {
  long long _ans = 1;
  for (long long i = _n - _k + 1; i <= _n; i++) _ans = _ans * i % _mod;
  for (long long i = 2; i <= _k; i++)
    _ans = _ans * modularInverse(i, _mod) % _mod;
  return _ans;
}
void sieve(bool* _startpos, bool* _endpos) {
  long long _maxnum = _endpos - _startpos;
  for (long long i = 4; i < _maxnum; i += 2) *(_startpos + i) = 1;
  for (long long i = 3; i * i < _maxnum; i += 2)
    if (*(_startpos + i) == 0)
      for (long long j = i * i; j < _maxnum; j += i) *(_startpos + j) = 1;
}
}  // namespace math
namespace geometry {
const long double PI = acos(-1), rad = 180 / PI;
long double degsin(long long __alpha) { return sin(__alpha / rad); }
long double degcos(long long __alpha) { return cos(__alpha / rad); }
long double degtan(long long __alpha) { return tan(__alpha / rad); }
long double arcsin(long long _sine) { return asin(_sine) * rad; }
long double arccos(long long _cosine) { return acos(_cosine) * rad; }
long double arctan(long long _tangent) { return atan(_tangent) * rad; }
}  // namespace geometry
using namespace cf_utilities;
using namespace compare;
using namespace bin;
using namespace math;
using namespace geometry;
long long b[1009][1009], visited[1009][1009];
long long from[1009][1009], dmin[1009][1009], dc[4] = {0, 1, 0, -1},
                                              dl[4] = {1, 0, -1, 0}, n, m, qcnt;
bool inrange(long long a, long long b) { return a >= 0 && a < b; }
bool difadj(long long p1, long long p2) {
  for (long long d = 0; d < 4; d++) {
    long long x = p1 + dc[d], y = p2 + dl[d];
    if (inrange(x, n) && inrange(y, m) && b[x][y] == b[p1][p2]) return false;
  }
  return true;
}
void testt() {}
int main() {
  fastIO();
  cin >> n >> m >> qcnt;
  char c;
  for (long long i = 0; i < n; i++) {
    for (long long j = 0; j < m; j++) {
      dmin[i][j] = LLONG_MAX;
      cin >> c;
      b[i][j] = c - '0';
    }
  }
  queue<pair<long long, long long> > q;
  for (long long i = 0; i < n; i++) {
    for (long long j = 0; j < m; j++) {
      if (!difadj(i, j)) {
        q.push({i, j});
        visited[i][j] = 1;
        from[i][j] = b[i][j];
        dmin[i][j] = 0;
      }
    }
  }
  while (!q.empty()) {
    pair<long long, long long> curr = q.front();
    for (long long d = 0; d < 4; d++) {
      long long x = curr.first + dc[d], y = curr.second + dl[d];
      if (inrange(x, n) && inrange(y, m) && visited[x][y] == 0 &&
          difadj(x, y)) {
        visited[x][y] = 1;
        from[x][y] = from[curr.first][curr.second];
        dmin[x][y] = dmin[curr.first][curr.second] + 1;
        q.push({x, y});
      }
    }
    q.pop();
  }
  for (long long i = 0; i < qcnt; i++) {
    long long x, y, c;
    cin >> x >> y >> c;
    x--;
    y--;
    if (dmin[x][y] >= c)
      cout << b[x][y] << '\n';
    else
      cout << (c - dmin[x][y] + b[x][y]) % 2 << '\n';
  }
  return 0;
}
