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 pos, neg []Project
for i := 0; i < n; i++ {
var a, b int
fmt.Scan(&a, &b)
if b >= 0 {
pos = append(pos, Project{a, b})
} else {
neg = append(neg, Project{a, b})
}
}
sort.Slice(pos, func(i, j int) bool {
return pos[i].a < pos[j].a
})
ans := 0
for _, p := range pos {
if r >= p.a {
r += p.b
ans++
}
}
sort.Slice(neg, func(i, j int) bool {
return neg[i].a+neg[i].b > neg[j].a+neg[j].b
})
maxRating := 60005
if r+5 > maxRating {
maxRating = r + 5
}
dp := make([]int, maxRating)
for i := range dp {
dp[i] = -1
}
dp[r] = ans
for _, p := range neg {
start := p.a
if -p.b > start {
start = -p.b
}
for c := start; c < maxRating; c++ {
if dp[c] != -1 {
if dp[c]+1 > dp[c+p.b] {
dp[c+p.b] = dp[c] + 1
}
}
}
}
maxAns := 0
for _, v := range dp {
if v > maxAns {
maxAns = v
}
}
fmt.Println(maxAns)
}