let find_all_counters (l:int list) (to_reach:int) = 
  let dep = max_list l to_reach in 
  let min = List.fold_left min 100 l in 
  let siz = to_reach / min + 1 in 
  let rec find_all_rec m res = 
    if ((List.length m) > siz) then res 
    else if (((sum_int_list m) = to_reach)) 
    then find_all_rec (next_counter l m) (m::res)
    else find_all_rec (next_counter l m) res
  in find_all_rec dep []