#include <bits/stdc++.h>
using namespace std;
struct Node {
  int id, fail, next[26];
  void init() {
    id = -1;
    fail = -1;
    memset(next, 0, sizeof(int) * 26);
  }
} node[2000050];
int e;
void insert(char *str, int id) {
  int len = strlen(str);
  int pos = 0;
  for (int i = 0; i < len; i++) {
    int tmp = str[i] - 'a';
    if (node[pos].next[tmp] == 0) {
      node[++e].init();
      node[pos].next[tmp] = e;
    }
    pos = node[pos].next[tmp];
  }
  node[pos].id = id;
}
int head, tail, q[2000050];
void bfs() {
  head = tail = 0;
  q[tail++] = 0;
  while (head < tail) {
    int u = q[head++];
    for (int i = 0; i < 26; i++) {
      if (node[u].next[i]) {
        int tmp = node[u].fail;
        while (tmp != -1 && node[tmp].next[i] == 0) tmp = node[tmp].fail;
        if (tmp == -1)
          tmp = 0;
        else
          tmp = node[tmp].next[i];
        node[node[u].next[i]].fail = tmp;
        q[tail++] = node[u].next[i];
      }
    }
  }
}
int n, k, g;
char record[2000050];
char word[2000050];
int dp[2000050];
int ans[2000050];
int cnt[2000050];
void solve() {
  memcpy(record + k * n, record, k * n);
  memset(dp, -1, sizeof(int) * (n * k));
  int pos = 0;
  for (int i = 0; i < k * n * 2; i++) {
    while (pos != 0 && node[pos].next[record[i] - 'a'] == 0)
      pos = node[pos].fail;
    pos = node[pos].next[record[i] - 'a'];
    if (node[pos].id != -1) dp[i % (n * k)] = node[pos].id;
  }
  memset(cnt, 0, sizeof(int) * g);
  for (int st = 0; st < k; st++) {
    bool flag = true;
    pos = st;
    for (int i = 0; i < n; i++) {
      if (dp[pos] == -1 || cnt[dp[pos]] > 0) {
        flag = false;
        while (pos >= 0) {
          cnt[dp[pos]] = 0;
          pos -= k;
        }
        break;
      }
      cnt[dp[pos]] = 1;
      ans[i] = dp[pos] + 1;
      pos += k;
    }
    if (flag) {
      printf("YES\n");
      for (int i = 0; i < n; i++) printf("%d ", ans[i]);
      printf("\n");
      return;
    }
  }
  printf("NO\n");
}
int main() {
  while (scanf("%d%d", &n, &k) == 2) {
    scanf("%s", record);
    scanf("%d", &g);
    e = 0;
    node[0].init();
    for (int i = 0; i < g; i++) {
      scanf("%s", word);
      insert(word, i);
    }
    bfs();
    solve();
  }
}
