how do i create different type of memberships types that require different access price.

I want to have 3 types of memberships..
1. free one..
2. paid one
3. one that is free but can only be accessed with a code, that is distributed with this group.

I want to have all 3 options accessible.