← Home
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	reader := bufio.NewReader(os.Stdin)
	var n int
	if _, err := fmt.Fscan(reader, &n); err != nil {
		return
	}

	b := make([]int64, n+1)
	for i := 1; i <= n; i++ {
		fmt.Fscan(reader, &b[i])
	}

	a := make([]int64, n+1)
	for i := 1; i <= n; i++ {
		fmt.Fscan(reader, &a[i])
	}

	x := make([]int, n+1)
	k := make([]int64, n+1)
	for i := 2; i <= n; i++ {
		fmt.Fscan(reader, &x[i], &k[i])
	}

	D := make([]int64, n+1)
	for i := 1; i <= n; i++ {
		D[i] = b[i] - a[i]
	}

	INF := int64(1000000000000000000)

	for i := n; i >= 2; i-- {
		if D[i] > 0 {
			D[x[i]] += D[i]
		} else if D[i] < 0 {
			needed := -D[i]
			if INF/k[i] < needed {
				D[x[i]] = -INF
			} else {
				D[x[i]] -= needed * k[i]
				if D[x[i]] < -INF {
					D[x[i]] = -INF
				}
			}
		}
	}

	if D[1] >= 0 {
		fmt.Println("YES")
	} else {
		fmt.Println("NO")
	}
}