To read a Modbus slaves Input Registers, 3xxxxx, use Modbus Function Code [4 (0x04) Read Input Registers].
As you probably found, Modus function code [3 (0x04) Read Holding Registers] is used to read a Modbus slave's Holding Registers (4xxxxx).
I don't know where the convention of using prefixes 3 and 4 are used to designate Input and Holding registers, respectively, but those prefixes mean nothing to the basic protocol, and are not included "on the wire" in Modbus communications, because the function code makes explicit which type (memory area) of data is the target of the message.
What will vary from device to device (Modbus Masters) is how to select the function code. Some devices list the function codes explicitly; some devices use the prefix designation (0xxxx, 1xxxx, etc.), and a data transfer direction (Read or Write).
Also note that the formal Modbus Data Model specifies the numbering each type of registers ordinally, i.e. from 1 to 65536, but the actual "on the wire" protocol uses the offset of the register from the first register of its type, i.e. from 0 to 65535. Again, what will vary from device to device is how the registers are documented (Modbus Slaves) to, or specified (Modbus Masters) by, the user. In a slave this is seen in the documentation of the register map; a master this is seen in the user interface (typically a dialogue box) when configuring a Modbus request block.
Bottom line: there are two conventions used to specify the type of Modbus request; there are two conventions used to specify the address of specific registers; making the choice from the four possible combination accounts for the vast majority of all Modbus configuration problems.