Optimising the design of building blocks for self-assembly of discrete clusters