EM406 providing strange readings

It seems you didn't understand my explanations.

Exchange these lines:

      Serial.write(Serial3.read());
      int c = Serial3.read();
      if(gps.encode(c)){

by:

      int c = Serial3.read();
      Serial.write(c);
      if(gps.encode(c)){

and encode() probably starts to work.