#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=105;
const int M=100005;
int t, n, skill10, skill10_from=-1;
struct talent
{
int type, x, y;
};
struct skill
{
int type, x, y, z;
};
struct character
{
int hp, HP, mp, MP, atk, def, datk, ddef;
int p[N];
int now=1, isdie=0;
talent tt;
skill sk;
}a[N][3];
struct effect
{
int atk, def, mp;
}ef[M][N][5];
void check_hmp(int now, int p)
{
a[p][now].hp=min(a[p][now].hp,a[p][now].HP),a[p][now].mp=min(a[p][now].mp,a[p][now].MP);
}
void in(int id)
{
for(int i=1;i<=n;i++)
{
cin>>a[i][id].HP>>a[i][id].MP>>a[i][id].atk>>a[i][id].def;
for(int j=1;j<=n;j++)
{
cin>>a[i][id].p[j];
}
cin>>a[i][id].tt.type>>a[i][id].tt.x>>a[i][id].tt.y;
cin>>a[i][id].sk.type>>a[i][id].sk.x>>a[i][id].sk.y>>a[i][id].sk.z;
a[i][id].hp=a[i][id].HP;
a[i][id].mp=a[i][id].MP;
a[i][id].ddef=a[i][id].mp=a[i][id].datk=0;
a[i][id].now=1, a[i][id].isdie=0;
}
}
void get_end(int id)
{
cout<<t<<"\n";
if(!id)cout<<"Alice\n";
else cout<<"Bob\n";
for(int i=1;i<=n;i++)
{
a[i][id].hp=max(a[i][id].hp,0ll);
cout<<a[i][id].hp<<" ";
}
exit(0);
}
void check_die(int id, int p)
{
if(a[p][id].hp<=0)
{
a[p][id].isdie=1;
a[p][id].hp=0;
}
bool f=1;
for(int i=1;i<=n;i++)
{
if(!a[i][id].isdie)
{
f=0;
}
}
if(f)
{
get_end(!id);
exit(0);
}
}
void decrease_blood(int id, int p, int x, int y)
{
a[p][id].mp++;
check_hmp(id,p);
int D=max(a[p][id].def+a[p][id].ddef,0ll);
if(a[p][id].tt.type==1)
{
a[p][id].hp-=max(x-D,0ll)+(y+1)/2;
}
else a[p][id].hp-=max(x-D,0ll)+y;
check_die(id,p);
}
void be_first(int id)
{
for(int i=1;i<=n;i++)
{
if(a[i][id].isdie)
{
continue;
}
while(a[a[i][id].p[a[i][id].now]][!id].isdie)a[i][id].now++;
}
}
void work0(int id, int p)
{
return ;
}
void work1(int id, int p)
{
for(int i=1;i<=n;i++)
{
if(a[i][!id].isdie)continue;
decrease_blood(!id,i,a[p][id].sk.x,0ll);
be_first(id);
a[i][!id].mp-=a[i][!id].mp/10;
}
}
void work2(int id, int p)
{
int A=max(a[p][id].atk+a[p][id].datk,1ll);
for(int i=1;i<=n;i++)
{
if(!a[i][!id].isdie)
{
decrease_blood(!id,i,0ll,A);
be_first(id);
}
}
}
void work3(int id, int p)
{
int A=max(a[p][id].atk+a[p][id].datk,1ll);
for(int i=1;i<=n;i++)
{
if(a[i][!id].isdie)continue;
decrease_blood(!id,i,min(a[i][!id].HP/10,a[p][id].sk.x*A),0ll);
be_first(id);
}
}
void work4(int id, int p)
{
for(int i=1;i<=n;i++)
{
if(a[i][!id].isdie)continue;
for(int j=t;j<=t+a[i][id].sk.x-1;j++)
{
ef[j][i][id].mp+=a[p][id].sk.y;
}
}
}
void work5(int id, int p)
{
be_first(id);
int tmp=a[p][id].p[a[p][id].now];
a[tmp][!id].ddef-=a[p][id].sk.x;
for(int j=t;j<=30000;j++)
{
ef[j][tmp][!id].def-=a[p][id].sk.x;
}
int A=max(a[p][id].atk+a[p][id].datk,1ll);
decrease_blood(!id,tmp,0ll,A);
be_first(id);
}
void work6(int id, int p)
{
be_first(id);
int A=max(a[p][id].atk+a[p][id].datk,1ll);
int k=a[p][id].p[a[p][id].now];
decrease_blood(!id,k,0ll,A);
be_first(id);
for(int i=1;i<=n;i++)
{
if(a[i][!id].isdie)
{
continue;
}
a[i][!id].datk-=a[p][id].sk.y;
for(int j=t;j<=t+a[i][id].sk.x-1;j++)
{
ef[j][i][!id].atk-=a[p][id].sk.y;
}
}
}
void work7(int id, int p)
{
int mini=1e13, id1=0;
for(int i=1;i<=n;i++)
{
if(a[i][id].isdie)continue;
if(a[i][id].hp<mini)
{
mini=a[i][id].hp;
id1=i;
}
a[i][id].datk+=a[p][id].sk.y;
for(int j=t;j<=t+a[i][id].sk.x-1;j++)
{
ef[j][i][!id].atk+=a[p][id].sk.y;
}
}
a[id1][id].hp+=a[p][id].sk.z;
check_hmp(id,id1);
}
void work8(int id, int p)
{
int A=max(a[p][id].atk+a[p][id].datk,1ll);
for(int i=1;i<=n;i++)
{
if(a[i][!id].isdie)continue;
decrease_blood(!id,i,A,0ll);
be_first(id);
}
for(int i=1;i<=n;i++)
{
if(a[i][!id].isdie)continue;
a[i][!id].ddef-=a[p][id].sk.y;
for(int j=t;j<=t+a[i][id].sk.x-1;j++)
{
ef[j][i][!id].def-=a[p][id].sk.y;
}
}
}
void work9(int id, int p)
{
for(int i=1;i<=n;i++)
{
if(a[i][id].isdie)continue;
a[i][id].hp+=a[p][id].sk.z;
check_hmp(id,i);
a[i][id].ddef+=a[p][id].sk.y;
for(int j=t;j<=t+a[i][id].sk.x-1;j++)
{
ef[j][i][id].def+=a[p][id].sk.y;
}
}
}
void work10(int id, int p)
{
for(int i=1;i<=n;i++)
{
if(a[i][id].sk.type==10)a[i][id].sk.type=0;
if(a[i][!id].sk.type==10)a[i][!id].sk.type=0;
if(a[i][id].isdie)continue;
a[i][id].atk*=2,a[i][id].def*=2;
a[i][id].hp=max(a[i][id].HP/2,a[i][id].hp),a[i][id].mp=max(a[i][id].MP/2,a[i][id].mp);
check_hmp(id,i);
for(int j=t;j<=t+a[i][id].sk.x-1;j++)
{
ef[j][i][id].mp++;
}
skill10=t+a[p][id].sk.x-1;
skill10_from=id;
}
}
void use_skill(int id, int p)
{
int type=a[p][id].sk.type;
a[p][id].now=0;
if(type==0)work0(id,p);
if(type==1)work1(id,p);
if(type==2)work2(id,p);
if(type==3)work3(id,p);
if(type==4)work4(id,p);
if(type==5)work5(id,p);
if(type==6)work6(id,p);
if(type==7)work7(id,p);
if(type==8)work8(id,p);
if(type==9)work9(id,p);
if(type==10)work10(id,p);
a[p][id].mp++;
check_hmp(id,p);
if(a[p][id].tt.type==5)
{
a[p][id].mp+=a[p][id].tt.y;
check_hmp(id,p);
}
}
int calculation(int id, int p, int q)
{
int A=max(a[p][id].atk+a[p][id].datk,1ll);
int D=max(a[q][!id].def+a[q][!id].ddef,0ll);
int x=A, y=0, maxi=0;
if(a[p][id].tt.type==2)
{
x=A,y=a[p][id].tt.x;
}
if(a[p][id].tt.type==4)
{
x=0, y=A;
}
if(a[q][!id].tt.type==1)
{
maxi=max(x-D,0ll)+(y+1)/2;
}
else
{
maxi=max(0ll,x-D)+y;
}
return maxi;
}
bool skill_selection(int id)
{
int maxi=-1, cnt=0, id1=0;
for(int i=1;i<=n;i++)
{
if(a[i][id].isdie)continue;
if(a[i][id].mp>=a[i][id].MP&&a[i][id].sk.type>maxi)
{
maxi=a[i][id].sk.type;
id1=i;
}
}
for(int i=1;i<=n;i++)
{
if(a[i][id].isdie)continue;
if(a[i][id].mp>=a[i][id].MP&&a[i][id].sk.type==id1)
{
cnt++;
id1=i;
}
}
if(cnt==1)
{
use_skill(id,id1);
return 1;
}
for(int i=n;i>=1;i--)
{
if(a[i][id].isdie)continue;
if(a[i][id].mp>=a[i][id].MP&&a[i][id].sk.type==id1)
{
use_skill(id,i);
return 1;
}
}
return 0;
}
void do_a_normal_attack(int id, int p, int q)
{
int A=max(a[p][id].atk+a[p][id].datk,1ll);
if(a[p][id].tt.type==2)
{
decrease_blood(!id,q,A,a[p][id].tt.x);
}
else if(a[p][id].tt.type==4)
{
decrease_blood(!id,q,0ll,A);
}
else
{
decrease_blood(!id,q,A,0ll);
}
be_first(id);
a[p][id].mp++;
check_hmp(id,p);
if(a[p][id].tt.type==5)
{
a[p][id].hp+=a[p][id].tt.x;
check_hmp(id,p);
}
}
bool normal_attack_selection(int id)
{
int maxi=-1, cnt=0, id1=-1, id2=-1;
for(int i=n;i>=1;i--)
{
if(a[i][id].isdie)continue;
be_first(id);
int k=a[i][id].p[a[i][id].now];
if(a[k][!id].hp<=0)a[k][!id].hp=0;
if(a[k][!id].hp>maxi)
{
maxi=a[k][!id].hp;
id1=i;
id2=k;
}
}
int maxi1=-1, id3;
for(int i=n;i>=1;i--)
{
if(a[i][id].isdie)continue;
be_first(id);
int k=a[i][id].p[a[i][id].now];
if(a[k][!id].hp==maxi)
{
cnt++;
maxi1=max(maxi1,calculation(id,i,k));
}
}
if(cnt==1)
{
do_a_normal_attack(id,id1,id2);
return 1;
}
for(int i=n;i>=1;i--)
{
if(a[i][id].isdie)continue;
be_first(id);
int k=a[i][id].p[a[i][id].now];
if(calculation(id,i,k)==maxi1&&a[k][!id].hp==maxi)
{
do_a_normal_attack(id,i,k);
return 1;
}
}
return 1;
}
void work114514(int id)
{
if(skill_selection(id))return ;
if(normal_attack_selection(id))return ;
}
void work1919810(int id)
{
for(int i=1;i<=n;i++)
{
if(a[i][id].isdie)continue;
a[i][id].mp++;
check_hmp(id,i);
if(a[i][id].tt.type==3)
{
a[i][id].hp+=a[i][id].tt.x;
a[i][id].mp+=a[i][id].tt.y;
check_hmp(id,i);
}
a[i][id].mp+=ef[t][i][id].mp;
check_hmp(id,i);
}
}
void do_effect(int id)
{
for(int i=1;i<=n;i++)
{
if(a[i][id].isdie)continue;
a[i][id].datk=ef[t][i][id].atk;
a[i][id].ddef=ef[t][i][id].def;
}
}
signed main()
{
cin>>n;
in(0),in(1);
while(t<=23333)
{
t++;
do_effect(0);
do_effect(1);
work114514(0);
work1919810(0);
do_effect(0);
do_effect(1);
work114514(1);
work1919810(1);
do_effect(0);
do_effect(1);
check_die(0,1);
check_die(1,1);
if(skill10==t&&skill10_from!=-1)
{
get_end(!skill10_from);
}
}
}