import colorsys


def hsl_to_rgb(hue, saturation, lightness):
    """Takes a colour in HSL format and produces an RGB string in the form
    #RRGGBB.

    :param hue: The Hue value (between 0 and 360).
    :param saturation: The Saturation value (between 0 and 100).
    :param lightness: The Lightness value (between 0 and 100).
    :raises ValueError: if any of the three parameters are outside their \
    bounds."""

    if not isinstance(hue, int) and not isinstance(hue, float):
        raise TypeError("hue must be numeric, not '%s'" % hue)
    if not isinstance(saturation, int) and not isinstance(saturation, float):
        raise TypeError("saturation must be numeric, not '%s'" % saturation)
    if not isinstance(lightness, int) and not isinstance(lightness, float):
        raise TypeError("lightness must be numeric, not '%s'" % lightness)
    if not (0 <= hue <= 360):
        raise ValueError("hue must be between 0 and 360, not '%s'" % str(hue))
    if not (0 <= saturation <= 100):
        raise ValueError(
         "saturation must be between 0 and 100, not '%s'" % str(saturation)
        )
    if not (0 <= lightness <= 100):
        raise ValueError(
         "lightness must be between 0 and 100, not '%s'" % str(lightness)
        )

    r, g, b = colorsys.hls_to_rgb(hue / 360, lightness / 100, saturation / 100)
    return ("#%02x%02x%02x" % (int(r * 255), int(g * 255), int(b * 255))).upper()