The domains are not independent of the functions. Each function needs to be joined with its domain and not in a separate, independent list. To anticipate further addenda, here is the general framework for using Outer[], which in this problem should have only two list arguments, one containing the data for each function and one containing the comparators:
Outer[reductionFunction, functionDataObjects, {Less, Greater}]
reductionFunction[fnData, comp] should be a function with two arguments, the function data and the comparator.
Outer[] produces all combinations of elements taking one from each list from the second argument on. Compare two lists to three lists:
Outer[R, {f, g}, {c1, c2}]
(*
{ {R[f, c1], R[f, c2]}, {R[g, c1], R[g, c2]} }
*)
Outer[R, {f, g}, {df, dg}, {c1, c2}]
(*
{{ {R[f, df, c1], R[f, df, c2]}, {R[f, dg, c1], R[f, dg, c2]} },
{ {R[g, df, c1], R[g, df, c2]}, {R[g, dg, c1], R[g, dg, c2]} }}
*)