package main
import (
"bufio"
"fmt"
"os"
"sort"
)
type Env struct {
w int
h int
idx int
}
func main() {
in := bufio.NewReader(os.Stdin)
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
var n, W, H int
if _, err := fmt.Fscan(in, &n, &W, &H); err != nil {
return
}
envs := make([]Env, 0, n)
for i := 1; i <= n; i++ {
var w, h int
fmt.Fscan(in, &w, &h)
if w > W && h > H {
envs = append(envs, Env{w: w, h: h, idx: i})
}
}
if len(envs) == 0 {
fmt.Fprintln(out, 0)
return
}
sort.Slice(envs, func(i, j int) bool {
if envs[i].w != envs[j].w {
return envs[i].w < envs[j].w
}
return envs[i].h > envs[j].h
})
m := len(envs)
prev := make([]int, m)
for i := range prev {
prev[i] = -1
}
tails := make([]int, 0, m)
for i := 0; i < m; i++ {
h := envs[i].h
pos := sort.Search(len(tails), func(j int) bool {
return envs[tails[j]].h >= h
})
if pos > 0 {
prev[i] = tails[pos-1]
} else {
prev[i] = -1
}
if pos == len(tails) {
tails = append(tails, i)
} else {
tails[pos] = i
}
}
last := tails[len(tails)-1]
seq := make([]int, 0, len(tails))
for last != -1 {
seq = append(seq, envs[last].idx)
last = prev[last]
}
for i, j := 0, len(seq)-1; i < j; i, j = i+1, j-1 {
seq[i], seq[j] = seq[j], seq[i]
}
fmt.Fprintln(out, len(seq))
for i, v := range seq {
if i > 0 {
fmt.Fprint(out, " ")
}
fmt.Fprint(out, v)
}
fmt.Fprintln(out)
}