Problem:
Score : 400 points

Problem Statement

We have a grid with H rows and W columns of squares.
Snuke is painting these squares in colors 1, 2, ..., N.
Here, the following conditions should be satisfied:

For each i (1 ≤ i ≤ N), there are exactly a_i squares painted in Color i. Here, a_1 + a_2 + ... + a_N = H W.

For each i (1 ≤ i ≤ N), the squares painted in Color i are 4-connected. That is, every square painted in Color i can be reached from every square painted in Color i by repeatedly traveling to a horizontally or vertically adjacent square painted in Color i.

Find a way to paint the squares so that the conditions are satisfied.
It can be shown that a solution always exists.

Constraints

1 ≤ H, W ≤ 100

1 ≤ N ≤ H W

a_i ≥ 1

a_1 + a_2 + ... + a_N = H W

Input

Input is given from Standard Input in the following format:

H W
N
a_1 a_2 ... a_N

Output

Print one way to paint the squares that satisfies the conditions.
Output in the following format:

c_{1 1} ... c_{1 W}
:
c_{H 1} ... c_{H W}

Here, c_{i j} is the color of the square at the i-th row from the top and j-th column from the left.

Sample Input 1

2 2
3
2 1 1

Sample Output 1

1 1
2 3

Below is an example of an invalid solution:

1 2
3 1

This is because the squares painted in Color 1 are not 4-connected.

Sample Input 2

3 5
5
1 2 3 4 5

Sample Output 2

1 4 4 4 3
2 5 4 5 3
2 5 5 5 3

Sample Input 3

1 1
1
1

Sample Output 3

1

Solution in Python (3.4.3) (judge verdict: Runtime Error)

h, w = map(int, input().split())
n = int(input())
colors = list(map(int, input().split()))
cmap = {i+1:a for i,a in enumerate(colors)}
colors = sorted(cmap.items(),key=lambda x:x[1],reverse=True)
campus=[0]*(h*w)

def printmtrx(campus):
    ts=""
    for idx,i in enumerate(campus):
        if((idx+1)%w==1):
            if idx==0:
                ts += str(i) + " "
            else:
                ts+="\n"+str(i)+" "
        else:
            if (idx+1)%w==0:
                ts += str(i)
            else:
                ts+=str(i)+" "
    print(ts)

def isTouching(color,i,campus):
    upi = i - w
    downi = i + w
    lefti = i - 1
    righti = i + 1
    try:
        if campus[upi] == color:
            return True
    except:
        pass
    try:
        if campus[downi]==color:
            return True
    except:
        pass
    try:
        if (campus[lefti]==color and not i%w==0):
            return True
    except:
        pass
    try:
        if (campus[righti]==color and not (i+1)%w==0):
            return True
    except:
        pass
    return False

#print(colors)
#print(cmap)
idx=0
ec=0
for i in colors:
    cnt=i[1]
    #print("cnt is "+str(cnt))
    while cnt>0:
        if i[1]==cnt and campus[idx]==0:
            campus[idx]=i[0]
            idx+=1
            cnt-=1
            #print("drawed "+str(idx-1)+" with color "+str(i[0]))
        elif isTouching(i[0],idx,campus) and campus[idx]==0:
            campus[idx]=i[0]
            idx+=1
            cnt-=1
            #print("drawed " + str(idx-1) + " with color " + str(i[0]))
        elif ec>1000000:
            #print("somthing seems went wrong")
            exit()
        else:
            for j in range(h*w):
                #print("checking where to color for color "+str(i[0])+". now checking "+str(j))
                if (isTouching(i[0],j,campus) or i[1]==cnt)and campus[j]==0:
                    idx=j
                    break
                elif(j==h*w-1):
                    #print("No place to color for color "+str(i[0]))
                    #printmtrx(campus)
                    exit()
        ec+=1

#print("done. printing result...")
printmtrx(campus)