#include <bits/stdc++.h>
using namespace std;
long long n, k, g;
string CD, name;
long long hashSum1[2000002];
long long modInverse1[2000002];
long long hashSum2[2000002];
long long modInverse2[2000002];
map<pair<long long, long long>, int> gamesMap;
long long binPow(long long a, long long b) {
  a %= 1000000009;
  long long res = 1;
  while (b > 0) {
    if (b & 1) res = res * a % 1000000009;
    a = a * a % 1000000009;
    b >>= 1;
  }
  return res;
}
void init1() {
  long long p = 31;
  long long power = 1;
  hashSum1[0] = (CD[0] - 'a' + 1);
  modInverse1[0] = 1;
  for (int i = 1; i < 2 * n * k; i++) {
    power = (power * p) % 1000000009;
    modInverse1[i] = binPow(power, 1000000009 - 2);
    hashSum1[i] = (hashSum1[i - 1] + ((CD[i] - 'a' + 1) * power) % 1000000009) %
                  1000000009;
  }
}
void init2() {
  long long p = 53;
  long long power = 1;
  hashSum2[0] = (CD[0] - 'a' + 1);
  modInverse2[0] = 1;
  for (int i = 1; i < 2 * n * k; i++) {
    power = (power * p) % 1000000009;
    modInverse2[i] = binPow(power, 1000000009 - 2);
    hashSum2[i] = (hashSum2[i - 1] + ((CD[i] - 'a' + 1) * power) % 1000000009) %
                  1000000009;
  }
}
long long generateHash1(string &name) {
  long long res = 0;
  long long p = 31;
  long long power = 1;
  for (char &ch : name) {
    res = (res + ((ch - 'a' + 1) * power) % 1000000009) % 1000000009;
    power = (power * p) % 1000000009;
  }
  return res;
}
long long generateHash2(string &name) {
  long long res = 0;
  long long p = 53;
  long long power = 1;
  for (char &ch : name) {
    res = (res + ((ch - 'a' + 1) * power) % 1000000009) % 1000000009;
    power = (power * p) % 1000000009;
  }
  return res;
}
int main() {
  cin >> n >> k;
  cin >> CD;
  CD = CD + CD;
  init1();
  init2();
  cin >> g;
  for (int i = 1; i <= g; i++) {
    cin >> name;
    long long hash1 = generateHash1(name);
    long long hash2 = generateHash2(name);
    gamesMap[{hash1, hash2}] = i;
  }
  vector<int> ans;
  for (int i = 0; i < k; i++) {
    vector<bool> selected(g + 1, false);
    long long start = i;
    long long end = i + k - 1;
    ans.clear();
    bool found = true;
    for (int j = 0; j < n; j++) {
      long long res1 = hashSum1[end];
      if (start > 0) res1 -= hashSum1[start - 1];
      if (res1 < 0) res1 += 1000000009;
      res1 = (res1 * modInverse1[start]) % 1000000009;
      long long res2 = hashSum2[end];
      if (start > 0) res2 -= hashSum2[start - 1];
      if (res2 < 0) res2 += 1000000009;
      res2 = (res2 * modInverse2[start]) % 1000000009;
      int pos = gamesMap[{res1, res2}];
      if (pos == 0) {
        found = false;
        break;
      }
      if (selected[pos]) {
        found = false;
        break;
      }
      selected[pos] = true;
      ans.push_back(pos);
      start = end + 1;
      end = start + k - 1;
    }
    if (found && ans.size() == n) {
      cout << "YES\n";
      for (int &i : ans) cout << i << " ";
      return 0;
    }
  }
  cout << "NO\n";
  return 0;
}
