#include <bits/stdc++.h>
using namespace std;
int n, k, g, fac[2000010][2], Hash[2000010][2];
char s[2000010], t[2000010];
map<pair<int, int>, int> ma;
void init() {
  fac[0][0] = fac[0][1] = 1;
  for (int i = 1; i < 2000010; i++)
    fac[i][0] = 1LL * fac[i - 1][0] * 131 % 1000000007;
  for (int i = 1; i < 2000010; i++)
    fac[i][1] = 1LL * fac[i - 1][1] * 131 % 998244353;
}
int get_hash(char s[], int mod) {
  long long res = 0;
  int len = strlen(s + 1);
  for (int i = 1; i <= len; i++) res = (1LL * res * 131 % mod + s[i]) % mod;
  return res;
}
int ans[2000010], vis[100010];
int main() {
  init();
  scanf("%d %d", &n, &k);
  scanf(" %s", s + 1);
  for (int i = 1; i <= n * k; i++) s[i + n * k] = s[i];
  for (int i = 1; i <= 2 * n * k; i++)
    Hash[i][0] = (1LL * Hash[i - 1][0] * 131 % 1000000007 + s[i]) % 1000000007;
  for (int i = 1; i <= 2 * n * k; i++)
    Hash[i][1] = (1LL * Hash[i - 1][1] * 131 % 998244353 + s[i]) % 998244353;
  scanf("%d", &g);
  for (int i = 1; i <= g; i++) {
    scanf(" %s", t + 1);
    pair<int, int> res =
        make_pair(get_hash(t, 1000000007), get_hash(t, 998244353));
    ma[res] = i;
  }
  int cnt = 0;
  for (int i = 1; i <= k; i++) {
    cnt = 0;
    memset(vis, 0, sizeof(vis));
    for (int j = i; j <= i + n * k - 1; j += k) {
      int tmp1 = (Hash[j + k - 1][0] -
                  1LL * Hash[j - 1][0] * fac[k][0] % 1000000007 + 1000000007) %
                 1000000007;
      int tmp2 = (Hash[j + k - 1][1] -
                  1LL * Hash[j - 1][1] * fac[k][1] % 998244353 + 998244353) %
                 998244353;
      pair<int, int> tmp = make_pair(tmp1, tmp2);
      int flag = ma[tmp];
      if (flag && !vis[flag]) {
        ans[++cnt] = flag;
        vis[flag] = 1;
      } else
        break;
    }
    if (cnt == n) break;
  }
  if (cnt == n) {
    puts("YES");
    for (int i = 1; i <= n; i++) {
      if (i != 1) printf(" ");
      printf("%d", ans[i]);
    }
    puts("");
  } else
    puts("NO");
}
