#include <bits/stdc++.h>
#pragma GCC optimize("Ofast", "unroll-loops", "omit-frame-pointer", "inline")
#pragma GCC option("arch=native", "tune=native", "no-zero-upper")
#pragma GCC target("avx2")
using namespace std;
const int maxn = 100005, maxl = 2000005;
struct PHash {
  vector<long long> hsh1, hsh2, p1, p2;
  PHash() {
    hsh1.push_back(0);
    hsh2.push_back(0);
    p1.push_back(1);
    p2.push_back(1);
  }
  PHash(string second) {
    hsh1.resize(second.size() + 1), hsh2.resize(second.size() + 1);
    p1.resize(second.size() + 1), p2.resize(second.size() + 1);
    p1[0] = p2[0] = 1;
    for (int i = 1; i <= second.size(); i++) {
      hsh1[i] = (hsh1[i - 1] * 131 + second[i - 1]) % 1000000007;
      hsh2[i] = (hsh2[i - 1] * 131 + second[i - 1]) % 1494318097;
      p1[i] = (p1[i - 1] * 131) % 1000000007;
      p2[i] = (p2[i - 1] * 131) % 1494318097;
    }
  }
  inline pair<long long, long long> forwardHash(int l, int r) {
    long long h1 =
        (hsh1[r] - (hsh1[l - 1] * p1[r - l + 1]) % 1000000007 + 1000000007) %
        1000000007;
    long long h2 =
        (hsh2[r] - (hsh2[l - 1] * p2[r - l + 1]) % 1494318097 + 1494318097) %
        1494318097;
    return make_pair(h1, h2);
  }
  inline void add_char(char c) {
    long long nh1 = (hsh1.back() * 131 + c) % 1000000007,
              nh2 = (hsh2.back() * 131 + c) % 1494318097;
    hsh1.push_back(nh1), hsh2.push_back(nh2);
    p1.push_back((p1.back() * 131) % 1000000007);
    p2.push_back((p2.back() * 131) % 1494318097);
  }
  inline void add_str(string second) {
    for (char c : second) add_char(c);
  }
  inline pair<long long, long long> first_k(int k) { return forwardHash(1, k); }
  inline pair<long long, long long> last_k(int k) {
    return forwardHash((int)hsh1.size() - k, (int)hsh1.size() - 1);
  }
  inline bool is_equal(PHash &p, int l1, int r1, int l2, int r2) {
    return forwardHash(l1, r1) == p.forwardHash(l2, r2);
  }
};
int N, K, W, cnt[maxn];
deque<int> dq[maxn];
char arr[maxl];
long long mods[maxn][2], pw[2][maxl];
pair<long long, long long> tot[maxn];
PHash hsh, words[maxn];
map<pair<long long, long long>, int> rev;
map<int, int> mm[maxn];
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> N >> K;
  pw[0][0] = pw[1][0] = 1;
  for (int i = 1; i <= N * K; i++) {
    cin >> arr[i];
    hsh.add_char(arr[i]);
    pw[0][i] = pw[0][i - 1] * 131 % 1000000007;
    pw[1][i] = pw[1][i - 1] * 131 % 1494318097;
  }
  for (int i = N * K + 1; i < 2 * N * K; i++) {
    hsh.add_char(arr[i - N * K]);
    pw[0][i] = pw[0][i - 1] * 131 % 1000000007;
    pw[1][i] = pw[1][i - 1] * 131 % 1494318097;
  }
  cin >> W;
  for (int i = 1; i <= W; i++) {
    string second;
    cin >> second;
    for (char c : second) words[i].add_char(c);
    rev[tot[i] = words[i].forwardHash(1, second.size())] = i;
  }
  for (int i = K; i < 2 * N * K; i++) {
    pair<long long, long long> sub = hsh.forwardHash(i - K + 1, i);
    int group = i % K, idx = rev[sub];
    if (dq[group].size() == N) {
      int first = dq[group][0];
      mods[group][0] =
          (mods[group][0] - (tot[first].first * pw[0][N - 1]) % 1000000007 +
           1000000007) %
          1000000007;
      mods[group][1] =
          (mods[group][1] - (tot[first].second * pw[1][N - 1]) % 1494318097 +
           1494318097) %
          1494318097;
      if (first == 0)
        cnt[group]--;
      else {
        mm[group][first]--;
        if (mm[group][first] == 1)
          cnt[group]--;
        else if (mm[group][first] == 0)
          mm[group].erase(first);
      }
      dq[group].pop_front();
    }
    if (rev[sub] == 0)
      cnt[group]++;
    else {
      if (mm[group][idx]) cnt[group]++;
      mm[group][idx]++;
    }
    dq[group].push_back(idx);
    mods[group][0] = (mods[group][0] * 131 + sub.first) % 1000000007;
    mods[group][1] = (mods[group][1] * 131 + sub.second) % 1494318097;
    if (dq[group].size() == N && !cnt[group]) {
      cout << "YES" << '\n';
      for (int ck : dq[group]) cout << ck << " ";
      return 0;
    }
  }
  cout << "NO" << '\n';
}
