#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:102400000,102400000")
using namespace std;
const double eps = 10e-10;
const int mod = 1000000007;
const int maxn = 300005;
const int maxm = 10005;
pair<int, int> ans[maxn];
int main() {
  int n, m, a;
  while (~scanf("%d%d", &n, &m)) {
    priority_queue<pair<int, int> > q;
    for (int i = (0); i < (n); i++)
      scanf("%d", &a), q.push(make_pair(a, i + 1));
    int cnt = 0;
    while (!q.empty()) {
      stack<pair<int, int> > st;
      pair<int, int> cur = q.top();
      q.pop();
      while (!q.empty() && cur.first) {
        pair<int, int> cc = q.top();
        q.pop();
        if (cc.first >= 1)
          cc.first--, cur.first--,
              ans[cnt++] = make_pair(cc.second, cur.second);
        if (cc.first) st.push(cc);
      }
      if (cur.first) break;
      while (!st.empty()) q.push(st.top()), st.pop();
    }
    if (cnt < m / 2) {
      puts("No");
      continue;
    }
    printf("Yes\n%d\n", m / 2);
    for (int i = (0); i < (cnt); i++)
      printf("%d %d\n", ans[i].first, ans[i].second);
  }
  return 0;
}
