#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-8;
const double pi = acos(-1.0);
int dblcmp(double d) {
  if (fabs(d) < eps) return 0;
  return d > eps ? 1 : -1;
}
vector<int> a[211111];
int d[211111];
set<pair<int, int> > st;
int b[211111];
int main() {
  int i, j, k, n, m;
  scanf("%d%d", &n, &m);
  for (i = 1; i <= n; i++) {
    scanf("%d", d + i);
  }
  for (i = 1; i <= n; i++) {
    if (d[i]) st.insert(make_pair(-d[i], i));
  }
  int it;
  vector<pair<int, int> > ans;
  pair<int, int> t;
  while (!st.empty()) {
    t = *st.begin();
    st.erase(t);
    int o = t.second;
    if (d[o] > (int)((st).size())) {
      puts("No");
      return 0;
    }
    for (i = 0; i < d[o]; i++) {
      t = *st.begin();
      st.erase(t);
      ans.push_back(make_pair(o, t.second));
      --d[t.second];
      b[i] = t.second;
    }
    for (i = 0; i < d[o]; i++) {
      if (d[b[i]]) st.insert(make_pair(-d[b[i]], b[i]));
    }
  }
  puts("Yes");
  printf("%d\n", m >> 1);
  for (__typeof(ans.begin()) e = ans.begin(); e != ans.end(); ++e) {
    printf("%d %d\n", e->first, e->second);
  }
  return 0;
}
