#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
int n, n2 = 1, m, tt, z[1000010], a[500010], b[500010], lpos[500010],
       rpos[500010];
string s, t, sv;
set<int> st;
vector<pair<int, int> > v;
void calcZ() {
  int lb = 0, ub = 0;
  for (int i = 1; i <= s.size() - 1; i++) {
    if (s[i] != s[0]) continue;
    if (i > ub) {
      int p = i;
      while (p < s.size() && s[p] == s[p - i]) p++;
      lb = i;
      ub = p - 1;
      z[i] = p - i;
    } else {
      int j = i - lb;
      if (j + z[j] - 1 < ub - lb)
        z[i] = z[j];
      else {
        int p = ub + 1;
        while (p < s.size() && s[p] == s[p - i]) p++;
        z[i] = p - i;
        lb = i;
        ub = p - 1;
      }
    }
  }
}
int main() {
  cin >> n >> m >> tt >> s >> t;
  while (n2 < n) n2 *= 2;
  sv = s;
  s = t + s;
  calcZ();
  for (int i = m, j = 0; i < s.size(); i++, j++) {
    a[j] = z[i];
    v.push_back(make_pair(a[j], j));
    if (a[j] >= m) {
      puts("Yes");
      if (n - tt - tt > j)
        cout << j + 1 << ' ' << j + tt + 1 << endl;
      else
        cout << n - tt - tt + 1 << ' ' << n - tt + 1 << endl;
      return 0;
    }
  }
  reverse(sv.begin(), sv.end());
  reverse(t.begin(), t.end());
  s = t + sv;
  memset(z, 0, sizeof(z));
  calcZ();
  for (int i = m, j = 0; i < s.size(); i++, j++) b[j] = z[i];
  reverse(b, b + n);
  sort(v.begin(), v.end());
  int cur = n - 1;
  for (int i = min(m, tt); i >= 0; i--) {
    while (cur >= 0 && v[cur].first >= i) st.insert(v[cur--].second);
    set<int>::iterator it = st.lower_bound(tt - i);
    if (it == st.end())
      lpos[i] = -1;
    else
      lpos[i] = *it;
  }
  while (!st.empty()) st.erase(st.begin());
  v.clear();
  for (int i = 0; i < n; i++) v.push_back(make_pair(b[i], i));
  sort(v.begin(), v.end());
  cur = n - 1;
  for (int i = min(m, tt); i >= 0; i--) {
    while (cur >= 0 && v[cur].first >= i) st.insert(-v[cur--].second);
    set<int>::iterator it = st.lower_bound(-(n - 1 - (tt - i)));
    if (it == st.end())
      rpos[i] = -1;
    else
      rpos[i] = -*it;
  }
  for (int i = 0; i < min(m, tt) + 1; i++) {
    if (lpos[i] == -1 || rpos[m - i] == -1 ||
        lpos[i] + i - 1 >= rpos[m - i] - (m - i) + 1)
      continue;
    puts("Yes");
    cout << lpos[i] - (tt - i) + 1 << ' ' << rpos[m - i] - (m - i) + 2 << endl;
    return 0;
  }
  puts("No");
  return 0;
}
