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")
}
}