#include<bits/stdc++.h>
#define int long long
using namespace std;
namespace Testify{
inline int read(){
int f(1),x(0);
char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-1;
for(;isdigit(ch);ch=getchar()) x=(x<<1)+(x<<3)+(ch^48);
return f*x;
}
inline void Write(int x){
if(x>9) Write(x/10);
putchar(x%10+48);
}
inline void write(int x){
if(x<0) putchar('-'),x=-x;
Write(x);
putchar(' ');
}
}
using namespace Testify;
int n,m,c;
const int N=25;
int p[N],p2[N];
int G[N][N];
mt19937 rd(chrono::system_clock::now().time_since_epoch().count());
inline int radom(int l,int r){
return rd()%(r-l+1)+l;
}
inline int energy(){
int res=0;
for(register int i=1;i<=n;i++){
for(register int j=1;j<=m;j++){
if(i==1&&j==1) continue;
if(i==1){
if(G[i][j]!=G[i][j-1]){
res++;
}
continue;
}
if(j==1){
if(G[i][j]!=G[i-1][j]){
res++;
}
continue;
}
if(G[i][j]!=G[i-1][j]){
res++;
}
if(G[i][j]!=G[i][j-1]){
res++;
}
}
}
return res;
}
int ans;
inline void SA(){
double T=3000;
while(T>1e-15){
int ra1=radom(1,n);
int ra2=radom(1,m);
int rb1=radom(1,n);
int rb2=radom(1,m);
if(ra1==rb1&&ra2==rb2){
continue;
}
swap(G[ra1][ra2],G[rb1][rb2]);
int e=energy();
double delta=e-ans;
if(delta<0){
ans=e;
}
else{
swap(G[ra1][ra2],G[rb1][rb2]);
}
T*=0.995;
}
}
signed main(void){
n=read(),m=read(),c=read();
if(n==1&&m==1){
write(1);
return 0;
}
for(register int i=1;i<=c;i++){
p[i]=p2[i]=read();
}
for(register int i=1;i<=n;i++){
for(register int j=1;j<=m;j++){
int op;
TERABYTE:
op=radom(1,c);
if(!p2[op]) {
goto TERABYTE;
}
else{
p2[op]--;
}
G[i][j]=op;
}
}
ans=energy();
while((double)clock()/CLOCKS_PER_SEC<4.8){
SA();
}
for(register int i=1;i<=n;i++){
for(register int j=1;j<=m;j++){
write(G[i][j]);
}
puts("");
}
return 0;
}