#include<bits/stdc++.h> usingnamespacestd; int vis[1<<21]; int sum[21][1050000]; int num[22]; #define ll long long vector<pair<int,int> >e; ll check(int a[], int n, ll k, int x = 0){ int l=0, r=n; while(l<=r){ int mid = l+r>>1; if(a[mid] - x>= k) r = mid - 1; else l = mid + 1; } return l; } intmain(){ int n, m, q; memset(vis, -1, sizeof vis); scanf("%d %d %d", &n, &m, &q); int now = 0; for(int i=1;i<=n;i++) { int x; scanf("%d", &x); now += x*(1<<i); sum[i][0] = x; } for(int i=1;i<=m;++i) { int x, y; scanf("%d %d", &x, &y); e.push_back({x,y}); } int nt =-1; int cnt = 1; while(vis[now]==-1){ vis[now] = cnt-1; for(int i=1;i<=n;i++) { num[i]=0; sum[i][cnt] = sum[i][cnt-1]; } for(int i=0;i<e.size();++i){ int x = e[i].first; int y = e[i].second; if(now&(1<<x)) num[y]++; } now = 0; for(int i=1;i<=n;i++) if(num[i]&1) now += (1<<i), sum[i][cnt]++; if(vis[now]!=-1) nt = vis[now],cnt-=2; cnt++; }
while(q--){ int x; ll k; scanf("%d %lld", &x, &k); ll ans = 0; if(!k){ puts("0"); continue; } if(n==1){ if(sum[1][0] < k) ans = -1; else ans = 0; }
elseif(nt==-1){ if(sum[cnt-1][x] < k) ans = -1; else ans += check(sum[x],cnt-1,k); } elseif(nt){ // 初始状态循环节起点 ll tmp = sum[x][nt-1]; if(k <= tmp) ans += check(sum[x], nt-1,k); else { k -= tmp; ans += nt-1; if(sum[x][cnt] - sum[x][nt-1] == 0) ans = -1; else { tmp = sum[x][cnt] - sum[x][nt-1]; ans += 1LL*(k-1)/tmp*(cnt-nt+1); k = k-(k-1)/tmp*tmp; if(k)ans += check(&sum[x][nt-1],cnt-nt+1,k,sum[x][nt-1]); } } } else { // if(sum[x][cnt] == 0) ans = -1; else { ll tmp = sum[x][cnt]; ans += 1LL*(k-1)/tmp*(cnt-nt+1); k = k-(k-1)/tmp*tmp; if(k)ans += check(&sum[x][nt-1],(cnt-nt+1),k)-1; } } printf("%lld\n", ans); }