#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include<tuple>
int n, m, q;
std::string letter;
const int MAXSIZE = 1e5 + 10;
int sum[4*MAXSIZE], tag[4*MAXSIZE];
bool same[4*MAXSIZE];
std::pair<int, int> toint(std::string& s) {
int res = 0;
int tag = 0;
for (int i = 0; i < n; ++i) {
if (s[i] == '1') {
res = (res << 1) + 1;
}
else if (s[i] == '0') {
res = (res << 1);
}
else {
res = (res << 1) + 1;
tag |= 1 << (n - 1 - i);
}
}
return { res, tag };
}
void up(int i) {
same[i] = same[i << 1] && same[(i << 1) | 1];
if (!same[i])
return;
if (((sum[i << 1] ^ sum[(i << 1) | 1]) & ~(tag[i << 1] | tag[(i << 1) | 1])) != 0) {
same[i] = false;
return;
}
sum[i] = sum[i << 1] & sum[(i << 1) | 1];
tag[i] = tag[i << 1] & tag[(i << 1) | 1];
}
void build(int i, int l, int r) {
if (l == r) {
std::cin >> letter;
std::tie(sum[i], tag[i]) = toint(letter);
same[i] = true;
return;
}
int m = l + ((r - l) >> 1);
build(i << 1, l, m);
build((i << 1) | 1, m + 1, r);
up(i);
}
void update(int i, int l, int r, int ql, int qr, std::string& s) {
if (ql <= l && r <= qr) {
std::tie(sum[i], tag[i]) = toint(s);
same[i] = 1;
return;
}
int m = l + ((r - l) >> 1);
if (m >= ql) update(i << 1, l, m, ql, qr, s);
if (m < qr) update((i << 1) | 1, m + 1, r, ql, qr, s);
up(i);
}
std::tuple<bool, int, int> query(int i, int l, int r, int ql, int qr) {
if (ql <= l && r <= qr) {
return { same[i], sum[i], tag[i] };
}
int m = l + ((r - l) >> 1);
std::tuple<bool, int, int> a, b;
if (m >= ql) a = query(i << 1, l, m, ql, qr);
if (m < qr) b = query((i << 1) | 1, m + 1, r, ql, qr);
if (m < ql) return b;
if (m >= qr) return a;
if (std::get<0>(a) && std::get<0>(b)) {
if (((std::get<1>(a) ^ std::get<1>(b)) & ~(std::get<2>(a) | std::get<2>(b))) != 0) {
return { false, 0 , 0 };
}
return { true, std::get<1>(a) & std::get<1>(b), std::get<2>(a) & std::get<2>(b) };
}
return { false, 0, 0 };
}
int cnt(int x) {
int res = 1;
while (x) {
res <<= 1;
x &= x - 1;
}
return res;
}
int main() {
std::ios::sync_with_stdio(0);
std::cin.tie(0);
std::cin >> n >> m >> q;
build(1, 1, m);
int res = 0;
for (int i = 0, c, a, b; i < q; ++i) {
std::cin >> c >> a;
if (c == 0) {
std::cin >> b;
auto t = query(1, 1, n, a, b);
if (std::get<0>(t)) {
res ^= cnt(std::get<2>(t));
}
}
else {
std::cin >> letter;
update(1, 1, n, a, a, letter);
}
}
std::cout << res << std::endl;
return 0;
}