<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def add(self, logical_id, property, value):
 """ Add the information that resource with given `logical_id` supports the given `property`, and that a reference to `logical_id.property` resolves to given `value. Example: "MyApi.Deployment" -> "MyApiDeployment1234567890" :param logical_id: Logical ID of the resource (Ex: MyLambdaFunction) :param property: Property on the resource that can be referenced (Ex: Alias) :param value: Value that this reference resolves to. :return: nothing """


        if not logical_id or not property:
            raise ValueError("LogicalId and property must be a non-empty string")

        if not value or not isinstance(value, string_types):
            raise ValueError("Property value must be a non-empty string")

        if logical_id not in self._refs:
            self._refs[logical_id] = {}

        if property in self._refs[logical_id]:
            raise ValueError("Cannot add second reference value to {}.{} property".format(logical_id, property))

        self._refs[logical_id][property] = value