package main
import (
"fmt"
"strings"
)
func main() {
var b, d int
if _, err := fmt.Scan(&b, &d); err != nil {
return
}
var a, c string
if _, err := fmt.Scan(&a, &c); err != nil {
return
}
for i := 0; i < len(c); i++ {
if !strings.Contains(a, string(c[i])) {
fmt.Println(0)
return
}
}
lenAdded := make([]int, len(a))
for i := 0; i < len(a); i++ {
curr := i
added := 0
for j := 0; j < len(c); j++ {
for a[curr] != c[j] {
curr = (curr + 1) % len(a)
added++
}
curr = (curr + 1) % len(a)
added++
}
lenAdded[i] = added
}
visited := make([]int, len(a))
matchCountAt := make([]int, len(a))
lenAt := make([]int, len(a))
for i := range visited {
visited[i] = -1
}
curr := 0
matches := 0
totalLen := 0
maxLen := b * len(a)
for {
if visited[curr] != -1 {
cycleMatches := matches - matchCountAt[curr]
cycleLen := totalLen - lenAt[curr]
if cycleLen > 0 {
remLen := maxLen - totalLen
numCycles := remLen / cycleLen
matches += numCycles * cycleMatches
totalLen += numCycles * cycleLen
}
for i := range visited {
visited[i] = -1
}
}
visited[curr] = matches
matchCountAt[curr] = matches
lenAt[curr] = totalLen
if totalLen+lenAdded[curr] <= maxLen {
totalLen += lenAdded[curr]
curr = (curr + lenAdded[curr]) % len(a)
matches++
} else {
break
}
}
fmt.Println(matches / d)
}