(lambda (ls less) (let nm ((ll (map list ls)))
  (if (pair? ll) (if (pair? (cdr ll))
    (nm (let srt ((a ll)) (if (null? a) '() (if (null? (cdr a)) a (cons
     (let mg ((a (car a))(b (cadr a)))
      (cond ((null? a) b) ((null? b) a)
        ((less (car a) (car b)) (cons (car a) (mg (cdr a) b)))
        (#t (cons (car b) (mg a (cdr b)))))) (srt (cddr a)))))))
    (car ll)) '())))

; test
(let* ((g ((((fileVal "RC4") "Seed stuff") 'rbi) (expt 10 9)))
       (h (((fileVal "Do") 'DoL) (expt 10 6) (lambda (u) (g))))
       (s ((fileVal "sort") h <))
       (sh (apply + h))
       (ss (apply + s)))
    (list ss (= ss sh)
    (or (null? s) (let ot ((x s)) (or (null? (cdr x))
        (and (<= (car x) (cadr x)) (ot (cdr x))))))))
; Above took 9 seconds with MzScheme version 352 on one processor of an Intel Duo 2 2.4 GHz.