#include <bits/stdc++.h>
using namespace std;
int trie[2000005][26];
int term[2000005];
void add(char *s, int k, int id) {
  static int pos = 1;
  int node = 0;
  for (int i = 0; i < k; ++i) {
    int ind = s[i] - 'a';
    if (!trie[node][ind]) {
      trie[node][ind] = pos++;
    }
    node = trie[node][ind];
  }
  term[node] = id;
}
int q[2000005], fail[2000005];
void computeFail() {
  int l = 1, r = 0;
  for (int i = 0; i < 26; ++i) {
    if (trie[0][i]) {
      q[++r] = trie[0][i];
    }
  }
  for (; l <= r; ++l) {
    int node = q[l];
    for (int i = 0; i < 26; ++i) {
      if (trie[node][i]) {
        int nnode = trie[node][i];
        q[++r] = nnode;
        fail[nnode] = trie[fail[node]][i];
      } else {
        trie[node][i] = trie[fail[node]][i];
      }
    }
  }
}
char s[2000005];
char gs[2000005];
bool vis[100005];
int f[2000005];
void solve() {
  int n, k;
  scanf("%d %d ", &n, &k);
  scanf("%s ", s);
  int len = n * k;
  for (int i = 0; i < len; ++i) {
    s[i + len] = s[i];
  }
  int g;
  scanf("%d ", &g);
  for (int i = 1; i <= g; ++i) {
    scanf(" %s ", gs);
    add(gs, k, i);
  }
  computeFail();
  int node = 0;
  for (int i = 0; i < len + len; ++i) {
    int ind = s[i] - 'a';
    node = trie[node][ind];
    if (i + 1 >= k) {
      f[i + 1 - k] = term[node];
    }
  }
  for (int st = 0; st < k; ++st) {
    for (int j = 1; j <= g; ++j) {
      vis[j] = 0;
    }
    bool isGood = true;
    for (int cc = 0, i = st; cc < n; ++cc, i += k) {
      if (!f[i] || vis[f[i]]) {
        isGood = false;
        break;
      }
      vis[f[i]] = true;
    }
    if (isGood) {
      printf("YES\n");
      for (int cc = 0, i = st; cc < n; ++cc, i += k) {
        printf("%d ", f[i]);
      }
      return;
    }
  }
  printf("NO\n");
}
int main() {
  solve();
  return 0;
}
