package main
import (
"fmt"
"sort"
)
type Project struct {
a, b int
}
func main() {
var n, r int
if _, err := fmt.Scan(&n, &r); err != nil {
return
}
var g1, g2 []Project
for i := 0; i < n; i++ {
var a, b int
fmt.Scan(&a, &b)
if b >= 0 {
g1 = append(g1, Project{a, b})
} else {
g2 = append(g2, Project{a, b})
}
}
sort.Slice(g1, func(i, j int) bool {
return g1[i].a < g1[j].a
})
sort.Slice(g2, func(i, j int) bool {
return g2[i].a+g2[i].b > g2[j].a+g2[j].b
})
ans := 0
for _, p := range g1 {
if r >= p.a {
r += p.b
ans++
}
}
dp := make([]int, 60005)
for i := range dp {
dp[i] = -1
}
if r > 60000 {
r = 60000
}
dp[r] = ans
for _, p := range g2 {
for j := p.a; j <= 60000; j++ {
if dp[j] != -1 && j+p.b >= 0 {
if dp[j]+1 > dp[j+p.b] {
dp[j+p.b] = dp[j] + 1
}
}
}
}
maxAns := 0
for _, v := range dp {
if v > maxAns {
maxAns = v
}
}
fmt.Println(maxAns)
}