import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
int t = in.nextInt();
for (int i = 0; i < t; i++) {
int m = in.nextInt();
int n = in.nextInt();
char[][] mn = new char[m][n];
List<WordFirstIndex> wordFirstIndexArray = new ArrayList<WordFirstIndex>();
for (int j = 0; j < m; j++) {
String line = in.next();
mn[j] = line.toCharArray();
}
String word = in.next();
char[] worChar = word.toCharArray();
char wordFirst = worChar[0];
for (int j = 0; j < m; j++) {
for (int k = 0; k < n; k++) {
// System.out.println("j=" + j + ",k=" + k);
if (mn[j][k] == wordFirst) {
WordFirstIndex wordFirstIndex = new WordFirstIndex();
wordFirstIndex.x = j;
wordFirstIndex.y = k;
wordFirstIndexArray.add(wordFirstIndex);
}
}
}
int inFirstWordCount = wordFirstIndexArray.size();
int count = 0;
for (int j = 0; j < inFirstWordCount; j++) {
WordFirstIndex wordFirstIndex = wordFirstIndexArray.get(j);
int x = wordFirstIndex.x;
int y = wordFirstIndex.y;
//单词长度
int worCharLen = worChar.length;
//向右
if (y + worCharLen <= n) {
char[] match = new char[worCharLen];
for (int k = 0; k < worCharLen; k++) {
match[k] = mn[x][y + k];
}
if (word.equals(new String(match))) {
count++;
}
}
//向下
if (x + worCharLen <= m) {
char[] match = new char[worCharLen];
for (int k = 0; k < worCharLen; k++) {
match[k] = mn[x + k][y];
}
if (word.equals(new String(match))) {
count++;
}
}
//斜向下45°
if (x + worCharLen <= m && y + worCharLen <= n) {
char[] match = new char[worCharLen];
for (int k = 0; k < worCharLen; k++) {
match[k] = mn[x + k][y + k];
}
if (word.equals(new String(match))) {
count++;
}
}
}
System.out.println(count);
}
}
static class WordFirstIndex {
int x;
int y;
}
}