#include <bits/stdc++.h>
using namespace std;
long long power(long long a, long long b, long long m) {
  if (b == 0) return 1;
  if (b == 1) return a;
  long long res = power(a, b / 2, m);
  res = (res * res) % m;
  if (b & 1) res = (res * a) % m;
  return res;
}
long long modinv(long long a, long long m) { return power(a, m - 2, m); }
long long add(long long a, long long b, long long m) {
  long long c = (a % m + b % m);
  if (c >= m) c -= m;
  return c;
}
long long sub(long long a, long long b, long long m) {
  long long c = (a % m - b % m);
  if (c < 0) c += m;
  return c;
}
long long mul(long long a, long long b, long long m) { return (a * b) % m; }
long long p1[2000005], p2[2000005];
pair<long long, long long> ans[2000005];
map<pair<long long, long long>, long long> has;
set<long long> sets[100005];
vector<long long> vec[100005];
void fun() {
  p1[0] = 29;
  p2[0] = 31;
  for (long long i = 1; i < 2000005; i++) {
    p1[i] = mul(p1[i - 1], 29, 1000000007);
    p2[i] = mul(p2[i - 1], 31, 1000000009);
  }
}
void calc(string s) {
  long long n = s.length(), i, v1 = 0, v2 = 0;
  for (i = 0; i < n; i++) {
    v1 = add(v1, mul(p1[i], s[i] - 'a' + 1, 1000000007), 1000000007);
    v2 = add(v2, mul(p2[i], s[i] - 'a' + 1, 1000000009), 1000000009);
    ans[i] = {v1, v2};
  }
}
pair<long long, long long> get(long long i, long long j) {
  if (i == 0) return ans[j];
  pair<long long, long long> p = ans[j];
  p.first = sub(p.first, ans[i - 1].first, 1000000007);
  p.first = mul(p.first, modinv(p1[i - 1], 1000000007), 1000000007);
  p.second = sub(p.second, ans[i - 1].second, 1000000009);
  p.second = mul(p.second, modinv(p2[i - 1], 1000000009), 1000000009);
  return p;
}
void solve() {
  fun();
  long long n, k, i;
  cin >> n >> k;
  string s, s1;
  cin >> s;
  long long m = s.size();
  for (i = 0; i < k; i++) s += s[i];
  long long g;
  cin >> g;
  for (i = 0; i < g; i++) {
    cin >> s1;
    calc(s1);
    pair<long long, long long> p = get(0, k - 1);
    has[p] = i + 1;
  }
  calc(s);
  for (i = 0; i < m; i++) {
    pair<long long, long long> p = get(i, i + k - 1);
    if (has.find(p) != has.end()) {
      long long x = has[p];
      sets[i % k].insert(x);
      vec[i % k].push_back(x);
    }
  }
  for (i = 0; i < k; i++) {
    if (sets[i].size() == n) {
      cout << "YES"
           << "\n";
      for (auto x : vec[i]) cout << x << " ";
      cout << "\n";
      return;
    }
  }
  cout << "NO"
       << "\n";
}
int32_t main() {
  ios_base::sync_with_stdio(0);
  cin.tie(NULL);
  cout.tie(NULL);
  long long t = 1;
  for (long long i = 1; i <= t; i++) {
    solve();
  }
  return 0;
}
