← Home
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)
}