package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
var n int
if _, err := fmt.Fscan(reader, &n); err != nil {
return
}
a := make([]int, n+1)
sum := 0
var A []int
var B []int
for i := 1; i <= n; i++ {
fmt.Fscan(reader, &a[i])
sum += a[i]
if a[i] >= 2 {
A = append(A, i)
} else {
B = append(B, i)
}
}
if sum < 2*n-2 {
fmt.Fprintln(writer, "NO")
return
}
k := len(A)
diam := k + 1
if diam > n-1 {
diam = n - 1
}
fmt.Fprintf(writer, "YES %d\n", diam)
fmt.Fprintln(writer, n-1)
deg := make([]int, n+1)
for i := 0; i < k-1; i++ {
fmt.Fprintln(writer, A[i], A[i+1])
deg[A[i]]++
deg[A[i+1]]++
}
if len(B) > 0 {
fmt.Fprintln(writer, B[0], A[0])
deg[B[0]]++
deg[A[0]]++
}
if len(B) > 1 {
fmt.Fprintln(writer, B[1], A[k-1])
deg[B[1]]++
deg[A[k-1]]++
}
idxA := 0
for i := 2; i < len(B); i++ {
for deg[A[idxA]] == a[A[idxA]] {
idxA++
}
fmt.Fprintln(writer, B[i], A[idxA])
deg[B[i]]++
deg[A[idxA]]++
}
}