// Slower C++ solution:
#include <map>

#include <set>

#include <stack>

#include <queue>

#include <vector>

#include <cmath>

#include <cstdio>

#include <cstdlib>

#include <cstring>

#include <iostream>

#include <algorithm>

#define ll long long

#define ms(a,b) memset(a,b,sizeof(a))

using namespace std;



const int MAXN = 1e2 + 100;

const int INF = 0x3FFFFFFF;

const ll MOD = 1e9+7;



int color[MAXN][MAXN];

int a[MAXN * MAXN];



int main()

{

    int r, c;

    cin >> r >> c;

    //int pro = r * c;

    int n;

    cin >> n;

    for(int i = 1; i <= n; i++)

        cin >> a[i];

    int index = 1;

    int cnt = a[1];

    int num = 1;

    for(int i = 1; i <= r; i++)

    {

        for(int j = 1; j <= c; j++)

        {

            if(!cnt)

            {

//                if(index + 1 > n)

//                {

//                    for(int q = 1; q <= r; q++)

//                    {

//                        for(int k = 1; k <= c - 1; k++)

//                        {

//                            cout << color[q][k] << " ";

//                        }

//                        cout << color[q][c] << endl;

//                    }

//                    return 0;

//                }

//                else

//                {

                    cnt = a[++index];

                    num++;

//                    color[i][j] = num;

//                    cnt--;

//                }

            }

//            else

//            {

                color[i][j] = num;

                cnt--;

//            }

//            cout << index << endl;

        }

    }

    for(int q = 1; q <= r; q++)

    {

        if(q % 2)

        {

            //cout << "--" << endl;

            for(int k = 1; k <= c - 1; k++)

            {

                cout << color[q][k] << " ";

            }

            cout << color[q][c] << endl;

        }

        else

        {

            //cout << n << endl;

            for(int k = c; k >= 2; k--)

            {

                cout << color[q][k] << " ";

            }

            cout << color[q][1] << endl;

        }

    }

    return 0;

}


// Faster C++ solution for the same problem (measured speedup: 5.205185538413226x):
#include<stdio.h>  

int a[105][105],b[10000+50];  

int main ()  

{  

    int h,w;  

    while(scanf("%d %d",&h,&w)!=EOF)  

    {  

        int i,j,t,k=0;  

        scanf("%d",&t);  

        for(i=0;i<t;i++)  

            scanf("%d",&b[i]);  

        for(i=0;i<h;i++)  

        {  

            if(i%2==0)  

                for(j=0;j<w;j++)  

                {  

                    a[i][j]=k+1;  

                    b[k]--;  

                    if(b[k]==0)  

                        k++;  

                }  

            if(i%2==1)  

                for(j=w-1;j>=0;j--)  

                {  

                    a[i][j]=k+1;  

                    b[k]--;  

                    if(b[k]==0)  

                        k++;  

                }  

        }  

        for(i=0;i<h;i++)  

        {  

            for(j=0;j<w-1;j++)  

                printf("%d ",a[i][j]);  

            printf("%d\n",a[i][w-1]);  

        }  

    }  

}