#include <bits/stdc++.h>
using namespace std;
long long int power(long long int x, long long int y, long long int p) {
  long long int res = 1;
  x = x % p;
  while (y > 0) {
    if (y & 1) res = (res * x) % p;
    y = y >> 1;
    x = (x * x) % p;
  }
  return res;
}
long long int fact[2 * 100005];
long long int func() {
  fact[0] = fact[1] = 1;
  for (long long int i = 2; i < 200001; i++) {
    fact[i] = (fact[i - 1] * i) % 1000000007;
  }
  return 0;
}
set<pair<int, int> > m;
set<int> k;
set<pair<int, int> > h;
int arr[100005], pp[100005];
int main() {
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    int x;
    cin >> x;
    if (x == 1) {
      k.insert(i + 1);
    } else {
      h.insert(make_pair(x, i + 1));
    }
    arr[i + 1] = x;
    pp[i + 1] = x;
  }
  set<int>::iterator it;
  set<pair<int, int> >::iterator ii, iii;
  set<pair<int, int> > ans;
  int cnt = 0;
  int mm = 0;
  ii = h.begin();
  iii = h.begin();
  if (h.size() == 0) {
    if (k.size() > 2) {
      cout << "NO";
      return 0;
    }
    cout << "YES 1\n1\n1 2";
    return 0;
  }
  for (ii = h.begin(); iii != h.end();) {
    pair<int, int> p1 = *ii;
    iii = ++ii;
    if (iii == h.end()) break;
    pair<int, int> p2 = *iii;
    ans.insert(make_pair(p1.second, p2.second));
    arr[p1.second]--;
    arr[p2.second]--;
    mm++;
  }
  if (k.size() && h.size()) {
    pair<int, int> p = *(h.begin());
    int x = *(k.begin());
    ans.insert(make_pair(x, p.second));
    arr[x]--;
    arr[p.second]--;
    k.erase(x);
    mm++;
  }
  if (k.size() && h.size()) {
    pair<int, int> p = *(--h.end());
    int x = *(k.begin());
    ans.insert(make_pair(x, p.second));
    arr[x]--;
    arr[p.second]--;
    k.erase(x);
    mm++;
  }
  for (int i = 1; i <= n; i++) {
    if (arr[i] && k.find(i) == k.end()) m.insert(make_pair(arr[i], i));
  }
  int gg = 0;
  for (it = k.begin(); it != k.end(); it++) {
    if (arr[*it] == 0) continue;
    m.erase(make_pair(arr[*it], *it));
    if (m.size() == 0) break;
    pair<int, int> p = *(m.rbegin());
    ans.insert(make_pair(*it, p.second));
    m.erase(make_pair(arr[p.second], p.second));
    arr[p.second]--;
    if (arr[p.second]) m.insert(make_pair(arr[p.second], p.second));
  }
  int sum = 0;
  for (int i = 0; i < n; i++) {
    sum += pp[i + 1];
  }
  if (sum < 2 * n - 2) {
    cout << "NO";
    return 0;
  }
  cout << "YES " << mm << endl;
  cout << ans.size() << endl;
  for (set<pair<int, int> >::iterator i = ans.begin(); i != ans.end(); i++) {
    cout << (*i).first << " " << (*i).second << endl;
  }
}
