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.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

/*
 * In this problem we can use brute-force with 2 loops, and find count 
 * for all beginning indexes. But it'll give us a TIME LIMIT.
 * So one good way is to memorize intermediate answers. So in every inner loop
 * we just subtract first on and go from end.
 * 
 */

public class P19 {
	
	public static void main(String [] args) {
		p509b();
	
	}
	
	public static void p509b() {
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		int k = in.nextInt();
		int min = 110;
		int max = 0;
		int [] arr = new int[n];
		for(int i=0; i<n; i++) {
			arr[i] = in.nextInt();
			if(min > arr[i])
				min = arr[i];
			if(arr[i] > max)
				max = arr[i];
		}
		if(max-min-1 > k-1) {
			System.out.println("NO");
			return;
		}
		
		System.out.println("YES");
		
		String ls = "";
		
		for(int i=0; i<=min; i++)
			ls += "1 ";
		int num=2;
		
		for(int i=min+1; i<max; i++) {
			ls += num;
			ls += " ";
			num++;
		}
		
		int kj , ind;
		
		for(int i=0; i<n; i++) {
			ind = min*2;
			kj = arr[i];
			if(kj>min)
				ind+=2;
			kj -= min;
			kj--;
			if(kj > 0) {
				if(kj < 10) {
					ind += kj*2;
				} else if (kj <= 100) {
					ind += 18;
					kj -= 9;
					ind += kj*3;
				}
			}
			System.out.println(ls.substring(0, ind));
		}
	}
	
	public static void p918b() {
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		int m = in.nextInt();
		
		HashMap<String, String> names = new HashMap<>();
		
		String [][] coms = new String[m][2];
		String a, b ;
		for(int i=0; i<n; i++) {
			a=in.next();
			b=in.next();
			names.put(b, a);
		}
		
		for(int i=0; i<m; i++) {
			coms[i][0] = in.next();
			coms[i][1] = in.next();
		}
		
		for(int i=0; i<m; i++) {
			System.out.println(coms[i][0] + " " + 
					coms[i][1] + " #" + names.get(coms[i][1].replaceAll(";", "")));
		}
	}
	
	public static void p918a() {
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		int a, b, c;
		HashSet<Integer> fib = new HashSet<>();
		a=1;b=1;
		c=2;
		fib.add(1);
		fib.add(2);
		while(c < n) {
			c=a+b;
			fib.add(c);
			a = b;
			b = c;
		}
		for(int i=1; i<=n; i++) {
			if(fib.contains(i)) {
				System.out.print("O");
			} else System.out.print("o");
		}
		System.out.println();
	}
	
	public static void p9182a() {
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		long t = in.nextLong();
		
		long books[] = new long[n];
		
		for(int i=0; i<n; i++)
			books[i] = in.nextLong();
		
		long count = 1;
		long maxCount = 0;

		long t1 = t;
		int j=0;
		for(int i=0; i<n; i++){
			count--;
			t1 += i>0?books[i-1]:0;
			for(; j<n; j++){
				if(books[j] <= t1) {
					t1 -= books[j];
					count++;
				}
				else
					break;
			}
			if(maxCount < count)
				maxCount=count;
		}
		
		System.out.println(maxCount);
	}

}