3 lane change scripting with vertical movement problem

I have a script I am working on and I believe I have the premise down but I am getting confused as to how to keep my 3 lane switching code and add in the Input.getaxis (“Vertical”) to work so the character can move forward, or should I just write a script sepearate making my player always move forward (this is for an infinite runner style game)

the code is as follows:
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
	public float speed = 6.0F;
	public float jumpSpeed = 8.0F;
	public float gravity = 20.0F;
	private Vector3 moveDirection = Vector3.zero;

	public int laneNumber = 0;
	public int lanesCount = 4;
	bool didChangeLastFrame = false;
	public float laneDistance = 2;
	public float firstLaneXPos = 0;
	public float deadZone = 0.1f;
	public float sideSpeed = 5;


	void Update() {
		CharacterController controller = GetComponent<CharacterController>();
		if (controller.isGrounded) {
			float input = Input.GetAxis("Horizontal");
			if(Mathf.Abs(Input) > deadZone) {
				if(!didChangeLastFrame) {
					didChangeLastFrame = true; //Prevent overshooting lanes
					laneNumber += Mathf.RoundToInt(Mathf.Sign(input));
					if(laneNumber < 0) laneNumber = 0;
					else if(laneNumber >= lanesCount) laneNumber = lanesCount - 1;
				}
			} else {
				didChangeLastFrame = false; 

			moveDirection = new Vector3(0, 0, Input.GetAxis("Vertical"));
			moveDirection = transform.TransformDirection(moveDirection);
			moveDirection *= speed;
			if (Input.GetButton("Jump"))
				moveDirection.y = jumpSpeed;
			
		}
		moveDirection.y -= gravity * Time.deltaTime;
		controller.Move(moveDirection * Time.deltaTime);
	}
}
}

Ok I have been able to work out the code for myself to get a 90% desired result, I can now change in only 3 lanes, jump, and I have also attached a script for zmovement. The last 10% is stopping the backwards movement. So for those wishing to do the same style of game/scripting I share with you what I have been able to achieve.

using UnityEngine;
using System.Collections;

public class PlayerControllerScript: MonoBehaviour 
{
	public float speed = 6.0F;
	public float jumpSpeed = 8.0F;
	public float gravity = 20.0F;
	private Vector3 moveDirection = Vector3.zero;
	
	public int laneNumber = 0;
	public int lanesCount = 4;
	bool didChangeLastFrame = false;
	public float laneDistance = 2;
	public float firstLaneXPos = 0;
	public float deadZone = 0.1f;
	public float sideSpeed = 5;

	
	void Update() {
		//Access the objects Character Controller
		CharacterController controller = GetComponent<CharacterController>();

		float input = Input.GetAxis("Horizontal");
		//Make sure the object is grounded before doing the math for lane changes
		if (controller.isGrounded)
		if(Mathf.Abs(input) > deadZone) {
			if(!didChangeLastFrame) {
				didChangeLastFrame = true; //Prevent overshooting lanes
				laneNumber += Mathf.RoundToInt(Mathf.Sign(input));
				if(laneNumber < 0) laneNumber = 0;
				else if(laneNumber >= lanesCount) laneNumber = lanesCount - 1;
			}
		}
		else 
		{
			didChangeLastFrame = false; 
			
			moveDirection = new Vector3(0, 0, Input.GetAxis("Vertical"));
			moveDirection = transform.TransformDirection(moveDirection);
			moveDirection *= speed;
			if (Input.GetButton("Jump"))
				moveDirection.y = jumpSpeed;
			
		}
		Vector3 pos = transform.position;
		pos.x = Mathf.Lerp(pos.x, firstLaneXPos + laneDistance * laneNumber, Time.deltaTime * sideSpeed);
		transform.position = pos;
		
		moveDirection.y -= gravity * Time.deltaTime;		
		controller.Move (moveDirection * Time.deltaTime);
	}
}