// 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 integer_a[105][105],integer_b[10000+50];



int main ()

{

    int h,m;

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

    {

        int i,j,t,k=0;

        scanf("%d",&t);

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

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

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

        {

            if(i%2==0)

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

                {

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

                    integer_b[k]--;

                    if(integer_b[k]==0)

                        k++;

                }

            if(i%2==1)

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

                {

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

                    integer_b[k]--;

                    if(integer_b[k]==0)

                        k++;

                }

        }

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

        {

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

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

            printf("%d\n",integer_a[i][m-1]);

        }

    }

}