Divide it into two part
S-> aSc|S1
S1->aS1b| $\epsilon$
Here first i produce as many c's as i want along with a
Second part i produce as many b's i want along with a
It also takes cares of case if i want only (a and b) or (only a and c) or none
no matter what if both b and c is $\neq$ 0 the there will be a followed by b followed by c
so first fill a and c it will help to create an void in middle which can be filled with a and b
if still finding hard then take 2 or 3 strings in mind and design an tree structure of string it might give you an direction