#include <bits/stdc++.h>
using namespace std;
char s[510000], t[510000];
int n, m, k, lpos[510000], rpos[510000], nex[510000], ext[510000], a[510000];
void getnex(char *t) {
  int len = strlen(t + 1), p = 0;
  nex[1] = len;
  while (t[p + 1] == t[p + 2] && p + 2 <= len) p++;
  nex[2] = p;
  int po = 2;
  for (int i = 3; i <= len; i++) {
    if (i + nex[i - po + 1] < po + nex[po])
      nex[i] = nex[i - po + 1];
    else {
      int j = nex[po] + po - i;
      if (j < 0) j = 0;
      while (t[j + 1] == t[i + j] && i + j <= len) j++;
      nex[i] = j;
      po = i;
    }
  }
}
void getext(char *s, char *t) {
  int ls = strlen(s + 1), lt = strlen(t + 1), p = 0;
  while (s[p + 1] == t[p + 1] && p + 1 <= min(ls, lt)) p++;
  ext[1] = p;
  int po = 1;
  for (int i = 2; i <= ls; i++) {
    if (i + nex[i - po + 1] < po + ext[po])
      ext[i] = nex[i - po + 1];
    else {
      int j = ext[po] + po - i;
      if (j < 0) j = 0;
      while (t[j + 1] == s[i + j] && i + j <= ls && j + 1 <= lt) j++;
      ext[i] = j;
      po = i;
    }
  }
}
void work(char *s, char *t, int *pos) {
  int ls = strlen(s + 1), lt = strlen(t + 1);
  getnex(t);
  getext(s, t);
  set<int> num;
  set<int>::iterator it, iit;
  for (int i = 1; i <= min(lt, k); i++) num.insert(i);
  for (int i = 1; i <= ls; i++) {
    int p = max(1, k - (i - 1));
    if (p <= ext[i]) {
      it = num.lower_bound(p);
      if (it != num.end())
        for (; (it != num.end() && (*it) <= ext[i]);) {
          pos[*it] = i + (*it) - k;
          iit = it;
          it++;
          num.erase(iit);
        }
    }
  }
}
char *reverse(char *s) {
  int len = strlen(s + 1);
  for (int i = 1; i <= len / 2; i++) swap(s[len - i + 1], s[i]);
  return s;
}
void special() {
  int ls = strlen(s + 1), lt = strlen(t + 1), lmin = 0, rmax = ls + 1;
  for (int i = 1; i <= ls; i++)
    if (ext[i] == lt) {
      rmax = i;
      if (!lmin) lmin = i;
    }
  if (lmin) {
    int p = max(1, lmin + lt - k);
    if (p + 2 * k - 1 <= ls) {
      cout << "Yes" << endl;
      cout << p << ' ' << p + k << endl;
      exit(0);
    }
  }
  if (rmax <= ls) {
    int p = min(rmax + k - 1, ls);
    if (p >= 2 * k) {
      cout << "Yes" << endl;
      cout << p - 2 * k + 1 << ' ' << p - k + 1 << endl;
      exit(0);
    }
  }
}
int main() {
  cin >> n >> m >> k;
  cin >> s + 1;
  cin >> t + 1;
  int lt = strlen(t + 1), ls = strlen(s + 1);
  work(s, t, lpos);
  if (lt <= k) special();
  work(reverse(s), reverse(t), a);
  for (int i = 1; i <= lt; i++)
    if (a[i]) rpos[lt - i + 1] = ls - a[i] + 1;
  for (int i = 1; i <= lt - 1; i++)
    if (lpos[i] + k - 1 < rpos[i + 1] - k + 1 && lpos[i] && rpos[i + 1]) {
      cout << "Yes" << endl;
      cout << lpos[i] << ' ' << rpos[i + 1] - k + 1;
      return 0;
    }
  cout << "No";
  return 0;
}
