#include //#include using namespace std; //using namespace atcoder; using ll = long long; using ull = unsigned long long; using P = pair; #define rep(i,n) for(ll i = 0;i < (ll)n;i++) #define ALL(x) (x).begin(),(x).end() #define MOD 1000000007 int nu(int i,int j){ return 7*i+j; } class UnionFind{ public: vector par; UnionFind(ll size) : par(size,-1){} bool unite(ll x,ll y){ x = root(x),y = root(y); if(x == y)return false; if(par[y] < par[x])swap(x,y); par[x] += par[y]; par[y] = x; return true; } bool find(ll x,ll y){ return root(x) == root(y); } ll root(ll x){ return par[x] < 0 ? x : par[x] = root(par[x]); } ll size(ll x){ return -par[root(x)]; } }; int main(){ int n,m,Q; cin >> n >> m >> Q; vector s(n); rep(i,n)cin >> s[i]; UnionFind uf(7*n); rep(i,n){ rep(j,6)if(s[i][j] == '1' && s[i][j+1] == '1')uf.unite(nu(i,j),nu(i,j+1)); if(s[i][0] == '1' && s[i][6] == '1')uf.unite(nu(i,0),nu(i,6)); } vector> vv(n); rep(i,m){ int v,u;cin >> v >> u; v--;u--; vv[v].push_back(u); vv[u].push_back(v); rep(j,7)if(s[v][j] == '1' && s[u][j] == '1')uf.unite(nu(v,j),nu(u,j)); } while(Q--){ int T,x,y;cin >> T >> x >> y; x--;y--; if(T == 1){ s[x][y] = '1'; for(auto au : vv[x]){ if(s[au][y] == '1')uf.unite(nu(x,y),nu(au,y)); } if(s[x][(y+1)%7] == '1')uf.unite(nu(x,y),nu(x,(y+1)%7)); if(s[x][(y-1+7)%7] == '1')uf.unite(nu(x,y),nu(x,(y-1+7)%7)); }else{ int res = uf.size(nu(x,0)); cout << res << "\n"; } } return 0; }