#include<cstdio>
#include<cstring>
#include<cstdlib>
int min(int a,int b)
{
return a>b?b:a;
}
struct S
{
int id,x;
int c[110];
} a[110],b[110];
int cmp(const void *a,const void *b)
{
struct S *p = (struct S *)a;
struct S *q = (struct S *)b;
return q->x-p->x;
}
int cmp1(const void *a,const void *b)
{
struct S *p = (struct S *)a;
struct S *q = (struct S *)b;
return p->id-q->id;
}
int cmp2(const void*a,const void *b)
{
return *(int *)a-*(int *)b;
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)==2)
{
if(!n&&!m) break;
for(int i = 0; i < n; i++)
{
scanf("%d",&a[i].x);
a[i].id = i;
}
for(int i = 0; i < m; i++)
{
scanf("%d",&b[i].x);
b[i].id = i;
}
qsort(a,n,sizeof(a[0]),cmp);
qsort(b,m,sizeof(b[0]),cmp);
int flag=0;
for(int i = 0; i < n; i++)
{
int t = a[i].x,tb=0,lc=0;
for(int j = 0; j < min(t,m); j++)
{
if(b[j].x)
{
b[j].x--;
a[i].c[lc++] = b[j].id;
tb++;
}
else t++;
}
if(tb<t)
{
flag=1;
break;
}
}
qsort(a,n,sizeof(a[0]),cmp1);
if(flag) printf("0\n");
else
{
printf("1\n");
for(int i = 0; i < n; i++)
{
qsort(a[i].c,a[i].x,sizeof(a[i].c[i]),cmp2);
for(int j = 0; j < a[i].x; j++)
printf("%d%c",a[i].c[j]+1,j==a[i].x-1?'\n':' ');
}
}
}
return 0;
}
#include<cstring>
#include<cstdlib>
int min(int a,int b)
{
return a>b?b:a;
}
struct S
{
int id,x;
int c[110];
} a[110],b[110];
int cmp(const void *a,const void *b)
{
struct S *p = (struct S *)a;
struct S *q = (struct S *)b;
return q->x-p->x;
}
int cmp1(const void *a,const void *b)
{
struct S *p = (struct S *)a;
struct S *q = (struct S *)b;
return p->id-q->id;
}
int cmp2(const void*a,const void *b)
{
return *(int *)a-*(int *)b;
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)==2)
{
if(!n&&!m) break;
for(int i = 0; i < n; i++)
{
scanf("%d",&a[i].x);
a[i].id = i;
}
for(int i = 0; i < m; i++)
{
scanf("%d",&b[i].x);
b[i].id = i;
}
qsort(a,n,sizeof(a[0]),cmp);
qsort(b,m,sizeof(b[0]),cmp);
int flag=0;
for(int i = 0; i < n; i++)
{
int t = a[i].x,tb=0,lc=0;
for(int j = 0; j < min(t,m); j++)
{
if(b[j].x)
{
b[j].x--;
a[i].c[lc++] = b[j].id;
tb++;
}
else t++;
}
if(tb<t)
{
flag=1;
break;
}
}
qsort(a,n,sizeof(a[0]),cmp1);
if(flag) printf("0\n");
else
{
printf("1\n");
for(int i = 0; i < n; i++)
{
qsort(a[i].c,a[i].x,sizeof(a[i].c[i]),cmp2);
for(int j = 0; j < a[i].x; j++)
printf("%d%c",a[i].c[j]+1,j==a[i].x-1?'\n':' ');
}
}
}
return 0;
}