Choosing given numbers randomly

Hello my fellow Unity people

I got a question and need some help. So I am making a tetris like game to spawn blocks in a FPS like game.

As you can see in the picture my blocks are all over the place in the pit. That is because (as you will see in my code) I am spawning random values.

So my question is:

" How can I spawn these blocks Randomly between given values: like choosing -4, 0, 4 randomly instead of the numbers that are in between them."

I only want to spawn them randomly at the given values that I specify. That way it isn’t all chaotic as you see in the picture. Show me the way!
Here is my code:

public class GameController : MonoBehaviour {

    public GameObject[] hazards;

    public int hazardCount;
    public float spawnWait;

    public Vector3 spawnValues;

    void Start()

    IEnumerator SpawnBlock()
        for (int i = 0; i < hazardCount; i++)
            GameObject hazard = hazards[Random.Range(0, hazards.Length)];
            Vector3 spawnPosition = new Vector3(Random.Range(-spawnValues.x, spawnValues.x), spawnValues.y, Random.Range(-spawnValues.z, spawnValues.z));
            Quaternion spawnRotation = Quaternion.identity;
            Instantiate(hazard, spawnPosition, spawnRotation);
            yield return new WaitForSeconds(spawnWait);

I thank you in advance

Random.Range is overloaded to work with ints and floats. If you pass it floats, it gives you floats. If you pass ints, it will give you ints. So, just cast your spawnValues coordinates to ints:

Vector3 spawnPosition = new Vector3(Random.Range((int)-spawnValues.x, (int)spawnValues.x), spawnValues.y, Random.Range((int)-spawnValues.z, (int)spawnValues.z));

This may have some off-by-1 problems, so may need to add one to the result of the Random.Range call. Also note that Random.Range(int, int) is exclusive, meaning it will never return the max value, whereas Random.Range(float, float) in inclusive and can return the max value.