#include<bits/stdc++.h>
using namespace std;const int Maxn =100+5;
struct Node{
vector<int>in,out;}tran[Maxn];
int p[Maxn];
int main(){
int Pn,Tn,Nf,kase =0;while(scanf("%d",&Pn)==1&& Pn){for(int i=1; i<=Pn; i++)scanf("%d",&p[i]);scanf("%d",&Tn);for(int i=1; i<=Tn; i++){
int x;while(scanf("%d",&x)==1&& x){if(x <0) tran[i].in.push_back(-x);else tran[i].out.push_back(x);}}scanf("%d",&Nf);
bool dead =0; int l;for(l=0; l<Nf; l++){
int cnt =0;for(int i=1; i<=Tn; i++){
bool flag =1;
vector<int>&in= tran[i].in,&out = tran[i].out;for(int j=0; j<in.size(); j++){if(p[in[j]]==0){
flag =0;while(j) p[in[--j]]++;break;}else p[in[j]]--;}if(!flag)++cnt;else{for(int k=0; k<out.size(); k++) p[out[k]]++;break;}}if(cnt == Tn){ dead =1;break;}}if(dead)printf("Case %d: dead after %d transitions\n",++kase,l);elseprintf("Case %d: still live after %d transitions\n",++kase, Nf);printf("Places with tokens:");for(int i=1; i<=Pn; i++)if(p[i])printf(" %d (%d)",i,p[i]);printf("\n\n");for(int i=1; i<=Tn; i++){
tran[i].in.clear();
tran[i].out.clear();}}return0;}