Another way to do this would be using a custom field and a webhook. Create a custom date field in Marketo like "30 Days before Renewal Date" or "Renewal Reminder Date". Now, using a webhook and external scripting, you can send the update the date field for this new custom field, based on your contract expiration date. Typically, the whole scripting shouldn't take more than 2-3 hours.
This would ensure you don't have to add wait steps in your campaign flows, keeping them simple.