/*
用map记录x每一个字符出现的频数
先比较两个字符串是否长度不同或值不同
再比较相应的map是否相同
*/
package main
import (
"bufio"
"fmt"
"os"
"sort"
"strconv"
"strings"
)
func check(s string, mp map[byte]int) bool {
var mp_ = make(map[byte]int)
for i:=0;i<len(s);i++{
mp_[s[i]]++
}
for k, v := range mp {
if mp_[k] != v{
return false
}
}
return true
}
func main() {
var n int
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
parts := strings.Split(scanner.Text(), " ")
n, _ = strconv.Atoi(parts[0])
a := parts[1:n+1]
length := len(parts)
x := parts[length-2]
k, _ := strconv.Atoi(parts[length-1])
var mp_x = make(map[byte]int)
var result = make([]string, 0)
for i:=0;i<len(x);i++{
mp_x[x[i]]++
}
for i:=0;i<len(a);i++{
if len(a[i])!= len(x) || a[i] == x{
continue
}
if check(a[i], mp_x) {
result = append(result, a[i])
}
}
sort.Strings(result)
fmt.Println(len(result))
if k-1 < len(result){
fmt.Println(result[k-1])
}
}