Why do I receive the value of all active coins when I click on any one of them?

I have an object that spawns the coin prefab and this is the script attached to the prefab. When i click on the coins they are destroyed properly, but I receive the value of all active coins at the time I click any of them.

Here is my Script.

using UnityEngine;
using System.Collections;

public class Token : MonoBehaviour 
{
	private GameObject Coin;
	private Money mscr;
	public float Worth;
	private Mine minescr;
	// Use this for initialization

	void Start () 
	{
		mscr = GameObject.Find("GameLogic").GetComponent<Money> ();
		minescr = GameObject.Find("Mine").GetComponent<Mine> ();

	}

	void CollectCoin()
	{
			mscr.money += Worth;
			Debug.Log("Cha-ching");
			minescr.hasToken = false;
			Destroy(Coin);
			Debug.Log("Got collected");

	}
	
	// Update is called once per frame
	void Update () 
	{
		transform.Rotate (Vector3.right * Time.deltaTime * 150);
		Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
		RaycastHit hit;
			
		if (Physics.Raycast (ray, out hit, 300)) 
		{
			if (hit.transform.tag == "Coin") 
			{
				Coin = hit.transform.gameObject;
			} 
			else 
			{
				Coin = null;
			}
		}
		if (Input.GetMouseButtonDown(0) && Coin != null)
		{
			CollectCoin();
					
		}
	}
}

The problem is this line right here:

 if (hit.transform.tag == "Coin") 

The check will be true even if the coin hit is not the coin the script is on. There are a few things you can do. An immediate fix might be:

if (hit.transform == transform)

This will only be true for the specific coin clicked on.

A simpler method might be to use OnMouseDown() to detect your click rather than to have a Raycast() on each coin. Or potentially an even better solution would be to remove the Raycast() from the coin script/class and put in on another object. That way you would only have one Raycast() per frame, rather than one Raycast() per coin.