(define (iota n . args) (let ((start (if (pair? args) (car args) 0)) (step (if (and (pair? args) (pair? (cdr args))) (cadr args) 1))) (let loop ((m n) (last (+ start (* step (- n 1)))) (a '())) (if (zero? m) a (loop (- m 1) (- last step) (cons last a)))))) (write (let* ((L (read)) (N (read)) (W (sort (map (lambda (x) (read)) (iota N)) <))) (let loop((a W) (sum 0) (res 0)) (if (null? a) res (let ((next-sum (+ sum (car a)))) (if (<= next-sum L) (loop (cdr a) next-sum (+ res 1)) res)))))) (newline)