Given a list of lowercase strings and an integer k (1 ≤ k ≤ n where n is number of strings), find the longest substring (contiguous) that appears as a substring in at least k different strings. If there are multiple substrings of that maximum length, return the lexicographically smallest one. If no non-empty substring appears in at least k strings, return an empty string. Implement a function that returns that substring.
(['ababc', 'babca', 'abcab'], 2)'abc'