Ultimately, you need an h-bridge driver of some sort to control the motors fully (to be able to vary their speed with PWM, and change their directions). There is no way around this. But there are cheaper ways than an Arduino motor shield.
But would the Arduino have enough power to control just one 3V motor?
There are many ways to control a motor without having to buy a shield. Have a read of this:-http://www.thebox.myzen.co.uk/Workshop/Motors_1.htmland the other motors pages on my site.