#include <bits/stdc++.h>
using namespace std;
pair<int, int> d[300000];
int ans[300000][2];
bool flag;
int start[300000];
int main() {
  int n, s;
  cin >> n >> s;
  flag = false;
  for (int i = 1; i <= n; i++) {
    cin >> d[i].first;
    d[i].second = i;
    if (d[i].first > n - 1) flag = true;
  }
  if (flag || s % 2) {
    cout << "No\n";
    return 0;
  }
  sort(d + 1, d + n + 1);
  int k = 0;
  for (int i = 0; i <= n - 1; i++) start[i] = 3 * n;
  start[d[1].first] = 1;
  for (int i = 2; i <= n; i++)
    if (d[i].first != d[i - 1].first) start[d[i].first] = i;
  for (int i = n; i >= 2; i--) {
    if (d[i].first == 0) break;
    int end = i - 1;
    if (d[end].first == 0) {
      cout << "No\n";
      return 0;
    }
    int beg = start[d[end].first];
    while (d[i].first > 0 && end - beg + 1 <= d[i].first) {
      for (int j = beg; j <= end; j++) {
        ans[k][0] = d[i].second;
        ans[k++][1] = d[j].second;
        start[d[j].first] = j + 1;
        d[j].first--;
        start[d[j].first] = min(start[d[j].first], j);
      }
      d[i].first -= (end - beg + 1);
      end = beg - 1;
      if (d[i].first > 0 && d[end].first == 0) {
        cout << "No\n";
        return 0;
      }
      beg = start[d[end].first];
    }
    int j;
    for (j = beg; j < beg + d[i].first; j++) {
      ans[k][0] = d[i].second;
      ans[k++][1] = d[j].second;
      start[d[j].first] = j + 1;
      d[j].first--;
      start[d[j].first] = min(start[d[j].first], j);
    }
    d[i].first = 0;
  }
  cout << "Yes\n" << k << endl;
  for (int i = 0; i < k; i++) cout << ans[i][0] << " " << ans[i][1] << endl;
  return 0;
}
