#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 100000;
const int MAX_K = 100000;
const int MAX_M = 1000000 + MAX_K;
const int PS[] = {4073, 4079};
const int MOD = 1000000021;
char s[MAX_M];
int pes[2][MAX_M + 1], invpes[2][MAX_M + 1];
int rh[2][MAX_M + 1], as[MAX_N];
map<long long, int> ms;
bool used[MAX_N];
inline int powmod(int a, int b) {
  int p = 1;
  while (b) {
    if (b & 1) p = (long long)p * a % MOD;
    a = (long long)a * a % MOD;
    b >>= 1;
  }
  return p;
}
inline void prep_rhash(int m) {
  for (int k = 0; k < 2; k++) {
    pes[k][0] = invpes[k][0] = 1;
    pes[k][1] = PS[k];
    invpes[k][1] = powmod(PS[k], MOD - 2);
    for (int i = 2; i <= m; i++) {
      pes[k][i] = (long long)pes[k][i - 1] * PS[k] % MOD;
      invpes[k][i] = (long long)invpes[k][i - 1] * invpes[k][1] % MOD;
    }
  }
}
inline long long s2hash(const char s[]) {
  long long h = 0;
  for (int k = 0; k < 2; k++) {
    int hk = 0;
    for (int i = 0; s[i]; i++)
      hk = (hk + (long long)s[i] * pes[k][i] % MOD) % MOD;
    h = (h << 32) | hk;
  }
  return h;
}
inline void s2rh(int m, const char s[]) {
  for (int k = 0; k < 2; k++)
    for (int i = 0, j = 0; i < m; i++, j++) {
      if (!s[j]) j = 0;
      rh[k][i + 1] = (rh[k][i] + (long long)s[j] * pes[k][i] % MOD) % MOD;
    }
}
inline long long rhash(int i, int j) {
  long long h = 0;
  for (int k = 0; k < 2; k++) {
    int hk = (long long)(rh[k][j] + MOD - rh[k][i]) % MOD * invpes[k][i] % MOD;
    h = (h << 32) | hk;
  }
  return h;
}
int main() {
  int n, k;
  scanf("%d%d%s", &n, &k, s);
  int m = n * k;
  prep_rhash(m + k);
  s2rh(m + k, s);
  int g;
  scanf("%d", &g);
  for (int i = 0; i < g; i++) {
    scanf("%s", s);
    long long h = s2hash(s);
    if (ms.find(h) != ms.end()) {
      puts("hash conflicts.");
      return 0;
    }
    ms[h] = i;
  }
  for (int d = 0; d < k; d++) {
    memset(used, false, sizeof(used));
    bool ok = true;
    for (int i = 0, l = d, r = d + k; i < n; i++, l += k, r += k) {
      long long hi = rhash(l, r);
      map<long long, int>::iterator mit = ms.find(hi);
      if (mit != ms.end() && !used[mit->second]) {
        used[mit->second] = true;
        as[i] = mit->second;
      } else {
        ok = false;
        break;
      }
    }
    if (ok) {
      puts("YES");
      for (int i = 0; i < n; i++) {
        printf("%d", as[i] + 1);
        putchar(i + 1 < n ? ' ' : '\n');
      }
      return 0;
    }
  }
  puts("NO");
  return 0;
}
