Then the amount which can be saved depends on how much inconvenience you will tolerate.
cjohnson has already pointed out how splitting at Rainham and Basingstoke reduces the cost from £34.40 to £28.60. This allows the itinerary:
0613 Grays - (0624 Rainham) - West Ham 0639
London Underground West Ham - Waterloo
0735 Waterloo - (0819 Basingstoke) - Winchester 0836
A further saving can be made if you are prepared to use Oyster Pay-as-you-go, touching out/in at Surbiton in each direction. But this requires an earlier start from Grays and later arrival time at Winchester. For example, this itinerary:
0600 Grays - West Ham 0626
London Underground West Ham - Waterloo
0723 Waterloo - Surbiton 0740 (or an earlier service: every 3-4 minutes)
Touch out at Surbiton and start to use Surbiton - Winchester ticket.
0744 Surbiton - Woking 0808
0816 Woking - Basingstoke 0837
0842 Basingstoke - Winchester 0856
is valid with this ticket combination:
Grays - Surbiton Oyster Off-Peak Railcard Single £4.10 (must touch in before 0630)
Surbiton - Winchester route Via Woking Railcard Anytime Day Return £15.10
Surbiton - Grays Oyster Off-Peak Railcard Single £4.10 (must touch in 0930 - 1559)
Total £23.30