That's pretty much how you have to do things with masks. Note that custom charsets support all the included charsets as well.
Instead of
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!#$&-'"
you can use
?l?u?d!#$&-'"
For generating more complex hcmask files have a look at policygen from PACK: https://github.com/iphelix/PACK
Instead of
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!#$&-'"
you can use
?l?u?d!#$&-'"
For generating more complex hcmask files have a look at policygen from PACK: https://github.com/iphelix/PACK