We present VS3, a tool that automatically verifies complex properties of programs and infers maximally weak preconditions and maximally strong postconditions by leveraging the power of SMT solvers. VS3 discovers program invariants with arbitrary, but prespecified, quantification and logical structure. The user supplies VS3 with a set of predicates and invariant templates. VS3 automatically finds instantiations of the unknowns in the templates as subsets of the predicate set. We have used VS3 to automatically verify $\forall\exists$ properties of programs and to infer worst case upper bounds and preconditions for functional correctness.