#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e6 + 10;
int mod[2] = {1000000007, 1000000009}, base[2] = {123, 333}, pw[2][MAXN];
struct hsh {
  int size;
  vector<int> num[2];
  hsh(const string &s) { build(s); }
  hsh() {}
  void build(const string &s) {
    size = s.size();
    for (int i = 0; i < 2; i++) {
      num[i] = vector<int>(size + 1, 0);
      for (int j = 1; j <= size; j++) {
        num[i][j] =
            (1LL * num[i][j - 1] * base[i] + s[j - 1] - 'a' + 1) % mod[i];
      }
    }
  }
  pair<int, int> gethash(int l, int r) {
    pair<int, int> res;
    res.first =
        (num[0][r + 1] - 1LL * num[0][l] * pw[0][r - l + 1] % mod[0] + mod[0]) %
        mod[0];
    res.second =
        (num[1][r + 1] - 1LL * num[1][l] * pw[1][r - l + 1] % mod[1] + mod[1]) %
        mod[1];
    return res;
  }
};
int T, n, k, g;
string s[MAXN];
hsh a[MAXN];
set<pair<pair<int, int>, int>> st;
vector<pair<pair<int, int>, int>> v;
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  T = 1;
  pw[0][0] = 1;
  pw[1][0] = 1;
  for (int i = 0; i < 2; i++) {
    for (int j = 1; j < MAXN; j++) {
      pw[i][j] = 1LL * pw[i][j - 1] * base[i] % mod[i];
    }
  }
  while (T--) {
    cin >> n >> k >> s[0] >> g;
    for (int i = 1; i <= g; i++) {
      cin >> s[i];
    }
    for (int i = 0; i < n * k; i++) {
      s[0].push_back(s[0][i]);
    }
    for (int i = 0; i <= g; i++) {
      a[i].build(s[i]);
    }
    for (int i = 1; i <= g; i++) {
      st.insert({a[i].gethash(0, k - 1), i});
    }
    for (int i = 0; i < k; i++) {
      bool b = true;
      for (int j = 0; j < n; j++) {
        pair<int, int> x = a[0].gethash(j * k + i, j * k + i + k - 1);
        auto it = st.lower_bound({x, 0});
        if (it == st.end() || (*it).first != x) {
          b = false;
          break;
        }
        v.push_back(*it);
        st.erase(it);
      }
      if (b) {
        cout << "YES\n";
        for (auto [x, y] : v) {
          cout << y << ' ';
        }
        return 0;
      }
      while (!v.empty()) {
        st.insert(v.back());
        v.pop_back();
      }
    }
    cout << "NO\n";
  }
  return 0;
}
