package main
import (
"bufio"
"fmt"
"io"
"os"
)
type FastScanner struct {
data []byte
idx int
n int
}
func NewFastScanner() *FastScanner {
data, _ := io.ReadAll(os.Stdin)
return &FastScanner{data: data, n: len(data)}
}
func (fs *FastScanner) NextInt() int {
for fs.idx < fs.n && (fs.data[fs.idx] < '0' || fs.data[fs.idx] > '9') && fs.data[fs.idx] != '-' {
fs.idx++
}
sign := 1
if fs.idx < fs.n && fs.data[fs.idx] == '-' {
sign = -1
fs.idx++
}
val := 0
for fs.idx < fs.n && fs.data[fs.idx] >= '0' && fs.data[fs.idx] <= '9' {
val = val*10 + int(fs.data[fs.idx]-'0')
fs.idx++
}
return sign * val
}
func main() {
fs := NewFastScanner()
n := fs.NextInt()
m := fs.NextInt()
p := make([]int, n)
for i := 0; i < n; i++ {
p[i] = fs.NextInt()
}
c := make([]int, n)
for i := 0; i < n; i++ {
c[i] = fs.NextInt() - 1
}
d := fs.NextInt()
del := make([]int, d)
removed := make([]bool, n)
for i := 0; i < d; i++ {
del[i] = fs.NextInt() - 1
removed[del[i]] = true
}
adj := make([][]int, m)
cnt := make(map[int]int, n*2)
const base = 5000
addStudent := func(idx int) {
if p[idx] >= m {
return
}
key := c[idx]*base + p[idx]
if cnt[key] == 0 {
adj[p[idx]] = append(adj[p[idx]], c[idx])
}
cnt[key]++
}
for i := 0; i < n; i++ {
if !removed[i] {
addStudent(i)
}
}
matchClub := make([]int, m)
for i := 0; i < m; i++ {
matchClub[i] = -1
}
visNum := make([]int, m)
visClub := make([]int, m)
stamp := 0
var dfs func(int) bool
dfs = func(num int) bool {
if visNum[num] == stamp {
return false
}
visNum[num] = stamp
for _, club := range adj[num] {
if visClub[club] == stamp {
continue
}
visClub[club] = stamp
if matchClub[club] == -1 || dfs(matchClub[club]) {
matchClub[club] = num
return true
}
}
return false
}
mex := 0
for mex < m {
stamp++
if dfs(mex) {
mex++
} else {
break
}
}
ans := make([]int, d)
ans[d-1] = mex
for i := d - 1; i >= 1; i-- {
addStudent(del[i])
for mex < m {
stamp++
if dfs(mex) {
mex++
} else {
break
}
}
ans[i-1] = mex
}
out := bufio.NewWriterSize(os.Stdout, 1<<20)
for i := 0; i < d; i++ {
fmt.Fprintln(out, ans[i])
}
out.Flush()
}