Cross coverage between three cover points with some constraints

Hi All,
I want to do cross coverage between 3 coverpoints. However, I don’t have to check all 329 combinations.
When the first bin "ap_ctrl " in CP_1 get hit , for both ad and bd in Cp_2, the only first three bins in Cp_3 gets hit.
Similarly, When the second bin "bp_ctrl " in CP_1 get hit , for both ad and bd in Cp_2, the [4:6] three bins in Cp_3 gets hit. I have to do cross for this condition instead cross covering all bins. I want to write the Code in efficient way. Any suggestions are appreciated!

Cp_1: coverpoint Name {
bins ap_ctrl = {Mem_ap_ctrl};
bins bp_ctrl = {Mem_bp_ctrl};
bins cp_ctrl = {Mem_cp_ctrl};
}

Cp_2: coverpoint opr {
bins ad = {p};
bins bd = {t};
}

Cp_3 : coverpoint t_names {
bins ap_ctrl_0 = {Mem_ap_ctrl_0};
bins ap_ctrl_1 = {Mem_ap_ctrl_1};
bins ap_ctrl_2 = {Mem_ap_ctrl_2};

bins bp_ctrl_0 = {Mem_bp_ctrl_0};
bins bp_ctrl_1 = {Mem_bp_ctrl_1};
bins bp_ctrl_2 = {Mem_bp_ctrl_2};

bins cp_ctrl_0 = {Mem_cp_ctrl_0};
bins cp_ctrl_1 = {Mem_cp_ctrl_1};
bins cp_ctrl_2 = {Mem_cp_ctrl_2};
}

*In reply to Adin:*The simplest thing to do is breaking up coverpoints Cp_1 and Cp_3 into 3 separate coverpoints, then just cross the coverpoints that you want.

Cp_1_ap: coverpoint Name {
bins ap_ctrl = {Mem_ap_ctrl};
}
Cp_1_ab: coverpoint Name {
bins bp_ctrl = {Mem_bp_ctrl};
}
Cp_1_cp: coverpoint Name {
bins cp_ctrl = {Mem_cp_ctrl};
}

Assuming you did a similar thing for Cp_3, your crosses would be

cx_ap: cross Cp_1_ap, Cp_2, Cp_3_ap;
cx_bp: cross Cp_1_bp, Cp_2, Cp_3_bp;
cx_cp: cross Cp_1_cp, Cp_2, Cp_3_cp;

A moe complicated alternative is crossing your 3 original coverpoints, and ignoring the crosses you don’t want.

cross Cp_1,Cp_2, Cp_3 {
   ignore_bins ig_ap = binsof(Cp_1.ap_ctrl) && ( !binsof(Cp_3.ap_ctrl_0) && !binsof(Cp_3.ap_ctrl_1) && !binsof(Cp_3.ap_ctrl_2) );
   ignore_bins ig_bp = binsof(Cp_1.bp_ctrl) && ( !binsof(Cp_3.bp_ctrl_0) && !binsof(Cp_3.bp_ctrl_1) && !binsof(Cp_3.bp_ctrl_2) );
   ignore_bins ig_cp = binsof(Cp_1.cp_ctrl) && ( !binsof(Cp_3.cp_ctrl_0) && !binsof(Cp_3.cp_ctrl_1) && !binsof(Cp_3.cp_ctrl_2) );
}

Or some hybred of the two.