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 []