#include <bits/stdc++.h>
using namespace std;
long long q, dp[105][100005], a[555555], b[555555], k, l, m, n, o, p;
map<long long, long long> mp;
vector<long long> adj[555555];
const long long mod = 1e9 + 7;
pair<long long, long long> pp[555555];
void solve() {
  cin >> n;
  k = 0;
  for (long long i = 1; i <= n; i++) {
    cin >> a[i];
    pp[i] = {a[i], i};
    k += a[i];
  }
  if (k < n * 2 - 2) return void(cout << "NO" << endl);
  sort(pp + 1, pp + n + 1);
  vector<long long> v1, v3;
  long long op = 0;
  for (long long i = 1; i <= n; i++) {
    if (pp[i].first == 1) {
      op = i;
      v3.push_back(pp[i].second);
      continue;
    }
    v1.push_back(pp[i].second);
  }
  p = v1.size() - 1;
  for (long long i = p; i > 0; i--) {
    a[v1[i]]--, a[v1[i - 1]]--;
    adj[v1[i]].push_back(v1[i - 1]);
    l++;
  }
  op--;
  m = 0;
  o = 0;
  while (op >= 0) {
    if (m & 1) {
      if (a[v1[p]]) {
        a[v1[p]]--;
        adj[v3[op]].push_back(v1[p]);
        l++;
      } else {
        p--, m++;
        continue;
      }
    } else {
      if (a[v1[o]]) {
        a[v1[o]]--;
        adj[v3[op]].push_back(v1[o]);
        l++;
      } else {
        o++, m++;
        continue;
      }
    }
    op--, m++;
  }
  k = v1.size();
  if (v3.size() > 1)
    k += 2;
  else if (v3.size())
    k++;
  cout << "YES " << k - 1 << endl;
  cout << l << endl;
  for (long long i = 1; i <= n; i++) {
    for (auto u : adj[i]) {
      cout << u << " " << i << endl;
    }
  }
}
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  q = 1;
  while (q--) {
    solve();
  }
}
