My code works with arbitrary functions. I just showed it in its most simple form
fA1[w1_, w2_, w3_, w4_] := 10 + w1 + w2 + w3 + w4
fB2[r1_, r2_, r3_, r4_] := 1 + r1 + r2 + r3 + r4
fC3[t1_] := 5*t1
hF1[{fA1_, fB2_, fC3_}, {d1_, d2_, d3_,
d4_}] := (2*fA1[d1 + d2, d3, d1, d2])*(3*
fB2[d1 + d2, d3, d1, d2])*(4*fC3[2*d1])
n = 100;
dom = {min, max} = {1, 10^6};
ranges = {{1, 2}, {1, 2}, {1, 2}, {1, 2}};
FindValue[{f_, fs_}, {min_, max_}, n_, ranges_] := {#, f[fs, #]} & /@
Select[Transpose[RandomReal[#, n] & /@ ranges],
min < f[fs, #] < max &]
hF1[{fA1, fB2, fC3}, {d1, d2, d3, d4}]
FindValue[{hF1, {fA1, fB2, fC3}}, dom, n, ranges]
Or in the case the evaluation of your function takes a long time, your dont want to compute f[fs,#] twice so you can also use
FindValue2[{f_, fs_}, {min_, max_}, n_, ranges_] :=
Block[{rand, val, sel},
rand = Transpose[RandomReal[#, n] & /@ ranges];
val = f[fs, #] & /@ rand;
sel = min < # < max & /@ val;
Pick[Thread[{rand, val}], sel, True]
]
Which is apparently faster even if the computation is short
FindValue[{hF1, {fA1, fB2, fC3}}, dom, n, ranges]; // AbsoluteTiming
FindValue2[{hF1, {fA1, fB2, fC3}}, dom, n, ranges]; // AbsoluteTiming
{0.0018419, Null}
{0.001193, Null}