#include <bits/stdc++.h>
using namespace std;
long long const N = 1e6 + 1, md = 1e9 + 7, inf = 1e17, sq = 500, base = 27;
int invbase, n, m, cnt[N], d[N];
string s;
pair<int, int> p[N], pq[N];
vector<int> table = {402653189, 805306457};
vector<int> q[N];
long long pw(long long a, long long b, long long MOD) {
  long long ans = 1;
  while (b) {
    if (b & 1) ans = (ans * a) % MOD;
    a = (a * a) % MOD, b /= 2;
  }
  return ans;
}
void make_hash(long long n, long long k) {
  long long m = n * k;
  for (int j = 0; j < table.size(); j++) {
    long long mod = table[j], ans = 0, pbase = 1;
    invbase = pw(base, mod - 2, mod);
    for (int i = m - k; i < m; i++) {
      ans = (ans + (s[i] - 'a') * pbase) % mod;
      pbase = (pbase * base) % mod;
    }
    pbase *= invbase;
    for (int i = 0; i < m; i++) {
      ans -= (s[(i - k + m) % m] - 'a');
      if (ans < 0) ans += mod;
      ans *= invbase;
      ans = (ans + (s[i] - 'a') * pbase) % mod;
      ans %= mod;
      if (!j)
        p[i].first = ans;
      else
        p[i].second = ans;
    }
  }
}
void dooo(long long n, long long k) {
  long long m = n * k;
  for (int i = 0; i < m; i++) {
    pq[i] = p[i];
  }
}
pair<int, int> ansp;
pair<int, int> get_hash(string a) {
  for (int i = 0; i < table.size(); i++) {
    long long mod = table[i], pbase = 1, sum = 0;
    for (int j = 0; j < a.size(); j++) {
      sum = (sum + (a[j] - 'a') * pbase) % mod;
      pbase = (pbase * base) % mod;
    }
    if (!i)
      ansp.first = sum;
    else
      ansp.second = sum;
  }
  return ansp;
}
int main() {
  long long n, k;
  cin >> n >> k >> s;
  make_hash(n, k);
  dooo(n, k);
  sort(pq, pq + (n * k));
  long long m;
  cin >> m;
  string s1;
  for (int i = 0; i < m; i++) {
    cin >> s1;
    pair<int, int> pp = get_hash(s1);
    long long id = lower_bound(pq, pq + (n * k), pp) - pq;
    if (id != (n * k) && pq[id] == pp) cnt[id]++, q[id].push_back(i + 1);
  }
  long long pt = n * k;
  bool ok;
  for (int i = 0; i < k; i++) {
    ok = 1;
    for (int j = i; j < pt; j += k) {
      long long id = lower_bound(pq, pq + (n * k), p[j]) - pq;
      if (cnt[id] == 0) {
        ok = 0;
        for (int t = i; t < j; t += k) {
          long long id = lower_bound(pq, pq + pt, p[t]) - pq;
          cnt[id]++;
        }
        break;
      }
      cnt[id]--;
    }
    if (ok) {
      cout << "YES\n";
      for (int j = i; j < pt; j += k) {
        long long id = lower_bound(pq, pq + pt, p[j]) - pq;
        cout << q[id][d[id]] << " ";
        d[id]++;
      }
      return 0;
    }
  }
  cout << "NO\n";
}
