#include <bits/stdc++.h>
using namespace std;
const int MAXN = 500005;
namespace EX_KMP {
const size_t N = 500005;
int next[N], extend[N];
void get_next(char* pattern) {
  next[0] = strlen(pattern);
  int k = 0;
  while (pattern[k + 1] && pattern[k] == pattern[k + 1]) k++;
  next[1] = k;
  for (int i = 2, p = 1; pattern[i]; i++) {
    int r = p + next[p] - 1;
    if (i + next[i - p] <= r)
      next[i] = next[i - p];
    else {
      int j = max(0, r - i + 1);
      while (pattern[i + j] && pattern[i + j] == pattern[j]) j++;
      next[i] = j, p = i;
    }
  }
}
void ex_kmp(char* text, char* pattern) {
  get_next(pattern);
  int k = 0;
  while (text[k] && pattern[k] && text[k] == pattern[k]) k++;
  extend[0] = k;
  for (int i = 1, p = 0; text[i]; i++) {
    if (i + next[i - p] < p + extend[p])
      extend[i] = next[i - p];
    else {
      int j = max(0, p + extend[p] - i);
      while (text[i + j] && pattern[j] && text[i + j] == pattern[j]) j++;
      extend[i] = j, p = i;
    }
  }
}
}  // namespace EX_KMP
using namespace EX_KMP;
int n, m, k;
char s[MAXN], t[MAXN];
int lpos[MAXN], rpos[MAXN];
void get_pos(char* s, char* t, int* pos) {
  ex_kmp(s, t);
  vector<int> v(n);
  iota(v.begin(), v.end(), 0);
  sort(v.begin(), v.end(), [](const int& a, const int& b) -> bool {
    return extend[a] > extend[b];
  });
  set<int> q;
  for (int i = min(k, m), j = 0; i >= 0; i--) {
    while (j < n && extend[v[j]] >= i) q.insert(v[j++]);
    auto it = q.lower_bound(k - i);
    if (it != q.end())
      pos[i] = *it;
    else
      pos[i] = -1;
  }
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  scanf("%s%s", s, t);
  get_pos(s, t, lpos);
  for (int i = 0; i < n; i++)
    if (extend[i] == m) {
      printf("Yes\n");
      if (i + m <= k)
        printf("1 %d\n", k + 1);
      else if (i >= n - k)
        printf("%d %d\n", n - 2 * k + 1, n - k + 1);
      else {
        int pos = max(i, k - 1);
        printf("%d %d\n", pos - k + 2, pos + 2);
      }
      return 0;
    }
  reverse(s, s + n), reverse(t, t + m);
  get_pos(s, t, rpos);
  for (int i = 0; i <= min(k, m); i++)
    if (~rpos[i]) rpos[i] = n - rpos[i] - 1;
  for (int i = max(m - k, 0); i <= min(k, m); i++) {
    int j = m - i;
    if (~lpos[i] && ~rpos[j] && rpos[j] - lpos[i] + 1 >= m) {
      printf("Yes\n");
      printf("%d %d\n", lpos[i] + i - k + 1, rpos[j] - j + 2);
      return 0;
    }
  }
  printf("No\n");
  return 0;
}
