Missing comma between "p0>0" and "And"?
Or you could Append that condition to the list of conditions that your Thread statement generetes then And @@ would apply to it. At the moment it means (p0>0) * (And@@Thread[... )
I have to put it even if i'm using And ??
Note that Maximize defaults to NMaximize when the arguments are not infinite precision, so you might not be getting the global optimum.