Please solve the programming task below using a self-contained code snippet in a markdown code block.

You are given a string s and an array of strings words.
You should add a closed pair of bold tag <b> and </b> to wrap the substrings in s that exist in words.

If two such substrings overlap, you should wrap them together with only one pair of closed bold-tag.
If two substrings wrapped by bold tags are consecutive, you should combine them.

Return s after adding the bold tags.
 
Please complete the following python code precisely:
```python
class Solution:
    def addBoldTag(self, s: str, words: List[str]) -> str:
```