#include <bits/stdc++.h>
int n, k;
int a[105][105] = {0};
int main() {
  int i, j;
  int getmax(void);
  void paint(int, int);
  scanf("%d%d", &n, &k);
  for (i = 0; i < n; i++) {
    scanf("%d", &a[i][0]);
  }
  for (i = 0; i < k; i++) {
    paint(getmax(), i + 1);
  }
  int flag = 1;
  for (i = 0; i < n; i++) {
    for (j = 1;; j++) {
      if (a[i][j] == 0) {
        j--;
        break;
      }
    }
    if (a[i][0] != j) {
      flag = 0;
      break;
    }
  }
  if (flag) {
    printf("YES\n");
    for (i = 0; i < n; i++) {
      for (j = 1; j <= a[i][0]; j++) {
        if (j == 1)
          printf("%d", a[i][j]);
        else
          printf(" %d", a[i][j]);
      }
      putchar('\n');
    }
  } else {
    printf("NO\n");
  }
  return 0;
}
int getmax(void) {
  int max, min;
  int i;
  int left(int);
  min = max = left(0);
  for (i = 1; i < n; i++) {
    int t;
    t = left(i);
    if (t > max) max = t;
    if (t < min) min = t;
  }
  if (max == min)
    return min;
  else
    return min + 1;
}
void paint(int max, int k) {
  int i, j, l;
  int left(int);
  for (i = 0; i < n; i++) {
    int num;
    num = left(i);
    for (j = a[i][0] - num + 1, l = num > max ? max : num; l && j <= a[i][0];
         j++, l--) {
      a[i][j] = k;
    }
  }
}
int left(int p) {
  int i;
  for (i = 1;; i++) {
    if (a[p][i] == 0) {
      i--;
      break;
    }
  }
  return a[p][0] - i;
}
