Programming Challenge from Kattis: Watchdog
Your solution is right, but unfortunately the time limit enforces a certain optimization. The key of this is where it says: 


  If several such point print point with lowest x, if several points with equal x, print point with lowest y


In your case, you just append all possible candidate and then you have a very complicated way to find the lowest. First of all, this complicated way could have been reduced to sorting and returning first element. 

If we think a bit further on how does itertools.product work, it will first iterate over x and then over y. This means that the first candidate we find, is the one with lowest x and lowest y of those x. This means 2 things: you don´t even need that sort, the answer will always be the first candidate. 

Now if the answer is always the first candidate, why are we keeping all candidates? And why are we still calculating other possible candidates when we already have the answer? Keeping this in mind, the solution to your time limit is simple adding a break after the possibles.append((x, y)) line. This will make us stop processing when we find the answer, and will save enough time for the time limit. 

This means all the elif len(possibles)&gt;1: part is unnecessary, making it shorter and cleaner. Another simple optimization is changing hatch_list to a set instead of a list so that the if (x, y) not in hatch_list: takes less than O(n). Its a small change that only requires changing list() to set() and append to add. 

There might be more optimization to make but the one of the break is the key to the problem and the expected optimization to make to be able to not have time limit.