Problem: There are n piles of pebbles on the table, the i-th pile contains ai pebbles. Your task is to paint each pebble using one of the k given colors so that for each color c and any two piles i and j the difference between the number of pebbles of color c in pile i and number of pebbles of color c in pile j is at most one.

In other words, let's say that bi, c is the number of pebbles of color c in the i-th pile. Then for any 1 ≤ c ≤ k, 1 ≤ i, j ≤ n the following condition must be satisfied |bi, c - bj, c| ≤ 1. It isn't necessary to use all k colors: if color c hasn't been used in pile i, then bi, c is considered to be zero.

Input

The first line of the input contains positive integers n and k (1 ≤ n, k ≤ 100), separated by a space — the number of piles and the number of colors respectively.

The second line contains n positive integers a1, a2, ..., an (1 ≤ ai ≤ 100) denoting number of pebbles in each of the piles.

Output

If there is no way to paint the pebbles satisfying the given condition, output "NO" (without quotes) .

Otherwise in the first line output "YES" (without quotes). Then n lines should follow, the i-th of them should contain ai space-separated integers. j-th (1 ≤ j ≤ ai) of these integers should be equal to the color of the j-th pebble in the i-th pile. If there are several possible answers, you may output any of them.

Examples

Input

4 4
1 2 3 4


Output

YES
1
1 4
1 2 4
1 2 3 4


Input

5 2
3 2 4 1 3


Output

NO


Input

5 4
3 2 4 3 5


Output

YES
1 2 3
1 3
1 2 3 4
1 3 4
1 1 2 3 4

Solution (in JAVA):

Solution:
import java.io.*;
import java.math.BigInteger;
import java.util.*;



/**
 *
 * @author ehab
 */

public class JavaApplication7 {

    /**
     * @param args the command line arguments
     */
    
    

    static boolean isIt(int ar[]){
    int c = 0 ;
    for(int i = 0 ; i < ar.length ; i++)
        if(ar[i] == 0)
            c++;
    return c == ar.length ;
    }
      static boolean isIt2(int ar[]){
    int c = 0 ;
    for(int i = 0 ; i < ar.length ; i++)
        if(ar[i] == 0)
            c++;
    return c >= 1 ;
    }
   static int arM []  ;
    public static void main(String[] args) throws Exception {
    
        StringBuilder ans = new StringBuilder();
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)) ;
        StringTokenizer st = new StringTokenizer(bf.readLine()) ; 
        int a = Integer.parseInt(st.nextToken()) , b  = Integer.parseInt(st.nextToken());
        int ar [] = new int [a] ;
        st = new StringTokenizer(bf.readLine()) ;
         for(int i = 0 ; i < ar.length ; i++)
             ar[i] = Integer.parseInt(st.nextToken())  ;
         
        StringBuilder sar[] = new StringBuilder[a] ;
        for(int i = 0 ; i < sar.length ; i++)
            sar[i] = new StringBuilder() ;
        boolean flag = true  ; int c = 0 ;
        for(int i = 1 ; i <= b ; i++)
        {  if(flag)
          while(flag)
            {
               for(int q = 0 ; q < a ;  q++)
                   if(ar[q] != 0)
                   { ar[q]--;
                       
                     sar[q].append(i+" ") ;
                   }
                   else 
                   { flag = false ; }
            
            
            }
           else
          for(int q = 0 ; q < a ;  q++)
                   if(ar[q] != 0)
                   { ar[q]--;
                       
                     sar[q].append(i+" ") ;
                   }
                   
        
        }
       
       
        if(isIt(ar))
        {System.out.println("YES");
         for(int i = 0 ; i < sar.length ; i++)
             ans.append(sar[i]+"\n") ;
            System.out.print(ans);
        }
        else
            System.out.println("NO");
       
    }}