#include <bits/stdc++.h>
using namespace std;
int n, k, siz, sz, g;
long long hashVal1[2000006], hashVal2[2000006], po1 = 1, po2 = 1;
map<pair<long long, long long>, int> game;
map<pair<int, int>, int> mark;
string s;
bool good[2000006];
void buildHash(int base, long long* hashVal, long long& po) {
  for (int i = 1; i <= k; i++) po = (po * base) % 1000000007;
  for (int i = 1; i <= sz; i++)
    hashVal[i] = (hashVal[i - 1] * base + s[i - 1] - 'a' + 1) % 1000000007;
}
void getGame(int id) {
  cin >> s;
  long long hashVal1 = 0, hashVal2 = 0;
  for (int i = 0; i <= int(s.size()) - 1; i++) {
    hashVal1 = (hashVal1 * 29 + s[i] - 'a' + 1) % 1000000007;
    hashVal2 = (hashVal2 * 31 + s[i] - 'a' + 1) % 1000000007;
  }
  game[make_pair(hashVal1, hashVal2)] = id;
}
long long getHash(int l, long long* hashVal, long long& po) {
  long long re = (hashVal[l + k - 1] - hashVal[l - 1] * po) % 1000000007;
  return (re + 1000000007) % 1000000007;
}
void setup() {
  cin >> n >> k >> s;
  siz = s.size();
  s = s + s;
  sz = s.size();
  buildHash(29, hashVal1, po1);
  buildHash(31, hashVal2, po2);
  cin >> g;
  for (int i = 1; i <= g; i++) getGame(i);
}
void xuly() {
  int belong = 0;
  for (int i = 1; i <= siz; i++) {
    if (++belong > k) belong = 1;
    long long get1 = getHash(i, hashVal1, po1);
    long long get2 = getHash(i, hashVal2, po2);
    int gam = game[make_pair(get1, get2)];
    if (gam == 0 || mark[make_pair(gam, belong)] == 1)
      good[belong] = true;
    else
      mark[make_pair(gam, belong)] = 1;
  }
  for (int i = 1; i <= k; i++)
    if (!good[i]) {
      cout << "YES\n";
      for (int q = 0; q <= n - 1; q++) {
        long long get1 = getHash(i + q * k, hashVal1, po1);
        long long get2 = getHash(i + q * k, hashVal2, po2);
        cout << game[make_pair(get1, get2)] << ' ';
      }
      return;
    }
  cout << "NO";
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(NULL);
  cout.tie(NULL);
  setup();
  xuly();
  return 0;
}
