package main
import (
"io"
"os"
)
func upperBound(a []int, x int) int {
l, r := 0, len(a)
for l < r {
m := (l + r) >> 1
if a[m] <= x {
l = m + 1
} else {
r = m
}
}
return l
}
func main() {
data, _ := io.ReadAll(os.Stdin)
idx := 0
nextInt := func() int {
for idx < len(data) && (data[idx] < '0' || data[idx] > '9') && data[idx] != '-' {
idx++
}
sign := 1
if data[idx] == '-' {
sign = -1
idx++
}
val := 0
for idx < len(data) && data[idx] >= '0' && data[idx] <= '9' {
val = val*10 + int(data[idx]-'0')
idx++
}
return sign * val
}
n := nextInt()
m := nextInt()
a := make([]int, m)
for i := 0; i < m; i++ {
a[i] = nextInt()
}
poss := make([]int, 0, n)
hitsAt := make([]int, 0, n)
vals := make([]byte, 0, n)
curLen := 0
totalHits := 0
maxPos := 0
for i := 0; i < n; i++ {
e := nextInt()
if e == -1 {
curLen -= upperBound(a, curLen)
totalHits++
} else {
p := curLen + 1
if p > maxPos {
maxPos = p
}
poss = append(poss, p)
hitsAt = append(hitsAt, totalHits)
if e == 0 {
vals = append(vals, '0')
} else {
vals = append(vals, '1')
}
curLen++
}
}
if len(poss) == 0 {
os.Stdout.Write([]byte("Poor stack!\n"))
return
}
capDeath := totalHits + 1
death := make([]int, maxPos+1)
a1 := a[0]
j := 0
cnt := 0
for p := 1; p <= maxPos; p++ {
isA := false
if j < m && a[j] == p {
isA = true
cnt++
j++
}
if p < a1 {
death[p] = capDeath
} else if isA {
death[p] = 1
} else {
q := p - cnt
d := death[q]
if d >= capDeath {
death[p] = capDeath
} else {
d++
if d > capDeath {
d = capDeath
}
death[p] = d
}
}
}
res := make([]byte, 0, len(vals))
for i := 0; i < len(vals); i++ {
if totalHits-hitsAt[i] < death[poss[i]] {
res = append(res, vals[i])
}
}
if len(res) == 0 {
os.Stdout.Write([]byte("Poor stack!\n"))
} else {
res = append(res, '\n')
os.Stdout.Write(res)
}
}