← Home
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]]++
	}
}