private void addMTWCs(MTWData data, int x, int y, int dx, int dy) {
            // Create set of tuples with coordinates - with annoying syntax
            Set<Tuple<Integer, Integer>> set = new HashSet<Tuple<Integer, Integer>>();
            // Trace in the given direction and it's opposite direction
            Tuple<Integer, Integer> first  = traceDirection(set, data.board, data.player,      x,       y,  dx,  dy);
            Tuple<Integer, Integer> second = traceDirection(set, data.board, data.player, x - dx,  y - dx, -dx, -dy);
            // Add to heuristic data if not empty and the WC is large enough to give a win
            if (!set.isEmpty() && first._1 + first._2 + second._1 + second._2 > 3) {
                int mTW = 4 - first._1 + second._1;

                if (data.player == playerID) {
                    data.mTWCFP1.add(set);
                    if (mTW < data.mTW1) data.mTW1 = mTW;
                }
                else {
                    data.mTWCFP2.add(set);
                    if (mTW < data.mTW2) data.mTW2 = mTW;
                }

            }
        }