#include <cstdio>
#include <cstring>
#include <algorithm>
#include <bitset>

using namespace std;

typedef long long ll;

const int MAXN = 832;

int n, m;
int x, y;
int K;
bitset<MAXN> e[MAXN];
bitset<MAXN> f[MAXN];

void init(){
	bitset<MAXN> a[2][MAXN], *b;

	for (int i = 0; i < m; ++i){
		a[0][i].reset();
		a[1][i].reset();
		a[1][i].set(i);
	}
	for (int i = 2; i <= n + 1; ++i){
		bitset<MAXN> (&f)[MAXN] = a[i - 1 & 1], (&g)[MAXN] = a[i & 1];
		g[0] ^= f[0];
		for (int j = 1; j < m; ++j){
			g[j - 1] ^= f[j];
			g[j] ^= f[j - 1];
			g[j] ^= f[j];
		}
	}

	bitset<MAXN> (&f)[MAXN] = a[n + 1 & 1];
	static int x[MAXN], y[MAXN];
	int r = 0;
	K = 0;
	for (int i, j, c = m - 1; c >= 0; --c){
		for (i = r; i < m && !f[i].test(c); ++i);
		if (i == m){
			y[K++] = c;
			continue;
		}
		swap(f[i], f[r]);
		x[r] = c;
		for (int i = r + 1; i < m; ++i)
			if (f[i].test(c))
				f[i] ^= f[r];
		++r;
	}

	for (int i = r - 1; i >= 0; --i)
		for (int j = i - 1; j >= 0; --j)
			if (f[j].test(x[i]))
				f[j] ^= f[i];

	for (int i = 0; i < K; ++i){
		int u = y[i];
		e[i].reset();
		e[i].set(u);
		for (int j = 0; j < r; ++j)
			e[i][x[j]] = f[j][u];
	}
}

bool getK(){
	static char s[MAXN];
	ll a[MAXN];

	scanf("%s%d%d", s, &x, &y);
	int n = strlen(s), m = 0-1;
	for (int i = n - 1; i >= 0; i -= 18){
		a[++m] = 0;
		for (int j = 17; j >= 0; --j){
			a[m] *= 10;
			if (i >= j)
				a[m] += s[i - j] - '0';
		}
	}

	const ll MOD = 1E18;
	for (int i = 0; i <= m; ++i)
		if (a[i] == 0)
			a[i] = MOD - 1;
		else{
			--a[i];
			break;
		}
	m -= m && !a[m];

	f[1].reset();
	for (int i = 0; i < K; ++i){
		if (a[0] & 1)
			f[1] ^= e[i];

		for (int j = m; j > 0; --j){
			if (a[j] & 1)
				a[j - 1] += MOD;
			a[j] >>= 1;
		}
		a[0] >>= 1;

		m -= m && !a[m];
	}
	return !m && !a[0];
}

int main(){
	int q;
	while (scanf("%d%d%d", &n, &m, &q) != EOF){
		init();
		for (int qi = 0; qi < q; ++qi){
			if (!getK()){
				putchar('?');
				continue;
			}
			for (int i = 2; i <= n; ++i){
				f[i] = f[i - 2] ^ f[i - 1] ^ f[i - 1] << 1 ^ f[i - 1] >> 1;
				f[i].reset(m);
			}
			putchar('0' + f[x][y - 1]);
		}
		puts("");
	}
	return 0;
}
