#include <bits/stdc++.h>
using namespace std;
string s, t, r;
long long h1[2000000 + 5], p1[2000000 + 5], rev1[2000000 + 5];
int l, n, k, g;
map<long long, vector<int>> mp1;
long long big_mod(long long a, long long b, long long mod) {
  a %= mod;
  long long res = 1;
  while (b > 0) {
    if (b & 1) res = (res * a) % mod;
    a = (a * a) % mod;
    b >>= 1;
  }
  return res % mod;
}
void pre_calulate() {
  s += s;
  l = (int)s.size();
  p1[0] = 1;
  for (int i = 1; i < 2000000 + 5; i++) {
    p1[i] = (p1[i - 1] * 31) % 1000000007;
    rev1[i] = big_mod(p1[i], 1000000007 - 2, 1000000007);
  }
  for (int i = 0; i < l; i++) {
    if (i == 0)
      h1[i] = ((s[i] - 'a' + 1) * p1[i]) % 1000000007;
    else
      h1[i] = (h1[i - 1] + (s[i] - 'a' + 1) * p1[i]) % 1000000007;
  }
}
long long calculate_hash1(string &s) {
  int l = (int)s.size();
  long long ret = 0;
  for (int i = 0; i < l; i++)
    ret = (ret + (s[i] - 'a' + 1) * p1[i]) % 1000000007;
  return ret;
}
bool check(int i, int idx) {
  for (int j = 0; j < k; j++) {
    if (s[i + j] != r[idx * k + j]) return false;
  }
  return true;
}
int main(int argc, const char *argv[]) {
  scanf("%d %d", &n, &k);
  cin >> s;
  pre_calulate();
  scanf("%d", &g);
  for (int i = 0; i < g; i++) {
    cin >> t;
    r += t;
    mp1[calculate_hash1(t)].push_back(i);
  }
  bool mark[g];
  vector<int> ans;
  for (int i = 0; i < k; i++) {
    for (int idx = 0; idx < g; idx++) mark[idx] = false;
    ans.clear();
    for (int j = i; j < n * k; j += k) {
      long long now1;
      int x;
      if (j == 0)
        now1 = h1[j + k - 1];
      else
        now1 = (((h1[j + k - 1] - h1[j - 1] + 1000000007) % 1000000007) *
                rev1[j]) %
               1000000007;
      int size = (int)mp1[now1].size();
      if (size == 0) break;
      if (size == 1) {
        x = mp1[now1][0];
        if (mark[x]) break;
      } else {
        for (int m = 0; m < size; m++) {
          x = mp1[now1][m];
          if (check(j, x)) {
            break;
          }
          if (m == size) break;
        }
      }
      mark[x] = true;
      ans.push_back(x);
      if (ans.size() >= n) break;
    }
    if (ans.size() >= n) {
      break;
    }
  }
  if (ans.size() >= n) {
    printf("YES\n");
    for (int j = 0; j < n; j++) printf("%d ", ans[j] + 1);
    printf("\n");
  } else
    printf("NO\n");
  return 0;
}
