#include <bits/stdc++.h>
using namespace std;
void Read(int &x) {
  char c;
  bool f(0);
  while (c = getchar(), c != EOF) {
    if (c == '-')
      f = 1;
    else if (c >= '0' && c <= '9') {
      x = c - '0';
      while (c = getchar(), c >= '0' && c <= '9') x = x * 10 + c - '0';
      ungetc(c, stdin);
      if (f) x = -x;
      return;
    }
  }
}
struct node {
  unsigned h1, h2, pos;
  inline node() {}
  inline node(unsigned h1, unsigned h2, unsigned pos)
      : h1(h1), h2(h2), pos(pos) {}
  inline bool operator<(const node b) const {
    if (h1 == b.h1) {
      if (h2 == b.h2) return pos < b.pos;
      return h2 < b.h2;
    }
    return h1 < b.h1;
  }
} a[100000 + 10], b[100000 + 10];
int n, k, g, ans[100000 + 10], len;
unsigned h1[1000000 * 2 + 10], h2[1000000 * 2 + 10],
    hash_pow1[1000000 * 2 + 10], hash_pow2[1000000 * 2 + 10];
char s[1000000 * 2 + 10], T[100000 + 10];
inline unsigned Get_hash1(int l, int r) {
  return ((h1[r] - 1ll * hash_pow1[r - l + 1] * h1[l - 1]) % 998244353 +
          998244353) %
         998244353;
}
inline unsigned Get_hash2(int l, int r) {
  return h2[r] - hash_pow2[r - l + 1] * h2[l - 1];
}
void read() {
  Read(n), Read(k);
  scanf("%s", s + 1);
  int i, j;
  len = n * k;
  for (i = 1; i <= len; i++) s[i + len] = s[i];
  hash_pow1[0] = hash_pow2[0] = 1;
  for (i = 1; i <= (len << 1); i++) {
    hash_pow1[i] = hash_pow1[i - 1] * 1ll * 67 % 998244353;
    hash_pow2[i] = hash_pow2[i - 1] * 91;
    h1[i] = (1ll * h1[i - 1] * 67 + s[i] - 'a' + 1) % 998244353;
    h2[i] = h2[i - 1] * 91 + s[i] - 'a' + 1;
  }
  Read(g);
  unsigned hh1, hh2;
  for (i = 1; i <= g; i++) {
    scanf("%s", T);
    hh1 = hh2 = 0;
    for (j = 0; j < k; j++) {
      hh1 = (1ll * hh1 * 67 + T[j] - 'a' + 1) % 998244353;
      hh2 = hh2 * 91 + T[j] - 'a' + 1;
    }
    a[i] = node(hh1, hh2, i);
  }
  sort(a + 1, a + g + 1);
}
void print() {
  int i;
  for (i = 1; i <= n; i++) printf("%d ", ans[i]);
}
void solve() {
  int i, j, l;
  for (i = 1; i <= k; i++) {
    for (j = 1; j <= n; j++)
      b[j] = node(Get_hash1(i + (j - 1) * k, i + j * k - 1),
                  Get_hash2(i + (j - 1) * k, i + j * k - 1), j);
    sort(b + 1, b + n + 1);
    for (j = l = 1; j <= g && l <= n; j++)
      if (a[j].h1 == b[l].h1 && a[j].h2 == b[l].h2) ans[b[l++].pos] = a[j].pos;
    if (l > n) {
      puts("YES");
      print();
      exit(0);
    }
  }
  puts("NO");
}
int main() {
  read();
  solve();
}
