#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2000001;
const int MAXM = 100001;
const int P[] = {29, 31};
const int MOD[] = {1000000007, 1000000009};
pair<int, int> hs[MAXN];
int pp[MAXN][2], inv[MAXN][2];
int ans[MAXM];
bool used[MAXM];
map<pair<int, int>, int> to;
string s, t;
int n, k, q;
void fast_io() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
}
pair<int, int> get(string &t) {
  pair<int, int> res;
  res.first = res.second = (t[0] - 'a' + 1);
  for (int i = 1; i < k; i++) {
    res.first = (res.first + 1LL * (t[i] - 'a' + 1) * pp[i][0]) % MOD[0];
    res.second = (res.second + 1LL * (t[i] - 'a' + 1) * pp[i][1]) % MOD[1];
  }
  return res;
}
pair<int, int> query(int lx, int rx) {
  if (!lx) return hs[rx];
  pair<int, int> res = make_pair(0, 0);
  res.first = (hs[rx].first - hs[lx - 1].first + MOD[0]) % MOD[0],
  res.first = (1LL * res.first * inv[lx][0]) % MOD[0];
  res.second = (hs[rx].second - hs[lx - 1].second + MOD[1]) % MOD[1],
  res.second = (1LL * res.second * inv[lx][1]) % MOD[1];
  return res;
}
int modpow(int x, int y, int mod) {
  int res = 1;
  while (y) {
    if (y & 1) res = (1LL * res * x) % mod;
    x = (1LL * x * x) % mod;
    y >>= 1;
  }
  return res;
}
bool solve(int st) {
  int p = 0, res = 1;
  for (int i = st; i < st + (n * k); i += k) {
    pair<int, int> at = query(i, i + k - 1);
    if (!to.count(at)) {
      res = 0;
      break;
    }
    int _id = to[at];
    if (used[_id]) {
      res = 0;
      break;
    }
    used[_id] = 1, ans[++p] = _id;
  }
  if (!res)
    for (int i = 1; i <= p; i++) used[ans[i]] = 0;
  return res;
}
int main() {
  fast_io();
  cin >> n >> k;
  cin >> s >> q;
  s = (s + s);
  pp[0][0] = pp[0][1] = inv[0][0] = inv[0][1] = 1;
  for (int i = 1; i < MAXN; i++) {
    for (int k = 0; k < 2; k++) {
      pp[i][k] = (1LL * P[k] * pp[i - 1][k]) % MOD[k];
      inv[i][k] = modpow(pp[i][k], MOD[k] - 2, MOD[k]);
    }
  }
  for (int i = 1; i <= q; i++) {
    cin >> t;
    to[get(t)] = i;
  }
  int N = s.length();
  hs[0].first = hs[0].second = (s[0] - 'a' + 1);
  for (int i = 1; i < N; i++) {
    hs[i].first =
        (hs[i - 1].first + 1LL * (s[i] - 'a' + 1) * pp[i][0]) % MOD[0];
    hs[i].second =
        (hs[i - 1].second + 1LL * (s[i] - 'a' + 1) * pp[i][1]) % MOD[1];
  }
  bool ok = 0;
  for (int st = 0; st < k and !ok; st++) {
    ok |= solve(st);
  }
  if (ok) {
    printf("YES\n");
    for (int i = 1; i <= n; i++) printf("%d ", ans[i]);
  } else
    printf("NO\n");
  return 0;
}
