Hm. I'm looking at your code, and yes, it does look a little overly complicated. However you seem to WANT it to be complicated; if I read the first part right, for instance, you're saying that IF grp1 < 6 AND grp2 < 6 AND grp3 < 2 then fail, else IF grp1 < 6 AND grp3 < 2 then fail, OR if grp2 < 6 AND grp3 < 2 then fail. In other words, complicated shiznits (apparently grp3 is more important here).
Basically, if you don't want it to be as easy as "if less than X men then fail", then you do have to use a bunch of ifs and thens and whats and whys. However, you can also use OR and AND to make it a little easier.
_cnt1 = {alive _x} count (units grp1);
_cnt2 = {alive _x} count (units grp2);
_cnt3 = {alive _x} count (units grp3);
if ((_cnt1 <= 6) && (_cnt2 <= 6) && (_cnt3 <=2))
then
{execvm "fail.sqf"}
else
{
if ((_cnt1 <= 6) && (_cnt3 <=2)) then {execvm "fail.sqf"}
};
etc etc. But as mentioned - if you're going to make it complicated, then you have to make it complicated! If, however, only grp3 is really important, then you could still just count the total number of units in grp1 and grp2, and then have a separate check to see if grp3 is <= 2?
Wolfrug out.