#include <bits/stdc++.h>
using namespace std;
inline long long mod(long long n, long long m) {
  long long ret = n % m;
  if (ret < 0) ret += m;
  return ret;
}
long long gcd(long long a, long long b) {
  return (b == 0LL ? a : gcd(b, a % b));
}
long long exp(long long a, long long b, long long m) {
  if (b == 0LL) return 1LL;
  if (b == 1LL) return mod(a, m);
  long long k = mod(exp(a, b / 2, m), m);
  if (b & 1LL) {
    return mod(a * mod(k * k, m), m);
  } else
    return mod(k * k, m);
}
vector<int> z_function(string s) {
  int n = s.size();
  vector<int> z(n);
  int L = 0, R = 0;
  for (int i = 1; i < n; i++) {
    if (i <= R) {
      if (i - L + z[i - L] > i - L + (R - i)) {
        z[i] = R - i + 1;
        while (i + z[i] < n and s[z[i]] == s[z[i] + i]) {
          z[i]++;
        }
      } else
        z[i] = z[i - L];
    } else {
      while (i + z[i] < n and s[z[i]] == s[z[i] + i]) {
        z[i]++;
      }
    }
    if (i + z[i] - 1 > R) {
      L = i, R = i + z[i] - 1;
    }
  }
  return z;
}
const int N = 1000100;
int n, m, k;
vector<int> order[N];
vector<int> get(string s, string t) {
  string aux = t + '#' + s;
  vector<int> z = z_function(aux);
  for (int i = 0; i < N; i++) order[i].clear();
  for (int i = 0; i < n; i++) {
    if (z[i + m + 1] > 0) order[z[i + m + 1]].push_back(i);
  }
  set<int> best;
  vector<int> res((int)s.size() + 10, -1);
  for (int x = m; x > 0; x--) {
    for (int id : order[x]) {
      best.insert(id);
    }
    auto it = best.lower_bound(k - x);
    if (it == best.end()) continue;
    res[x] = *it;
  }
  return res;
}
vector<int> lpos, rpos;
int32_t main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  cin >> n >> m >> k;
  string s, t;
  cin >> s >> t;
  string aux = t + '#' + s;
  vector<int> z = z_function(aux);
  for (int i = 0; i < n; i++) {
    if (z[i + 1 + m] >= m) {
      cout << "Yes"
           << "\n";
      int l = min(i + 1, n - 2 * k + 1);
      int r = l + k;
      cout << l << " " << r << "\n";
      return 0;
    }
  }
  lpos = get(s, t);
  reverse(s.begin(), s.end());
  reverse(t.begin(), t.end());
  rpos = get(s, t);
  for (int i = 1; i <= min(m - 1, k); i++) {
    if (m - i > k) continue;
    int id1 = lpos[i], id2 = rpos[m - i];
    if (id1 == -1 or id2 == -1) continue;
    int L = lpos[i] + i - 1, R = rpos[m - i] + (m - i) - 1;
    if (L + R >= n - 1) continue;
    id1 = lpos[i] + i - (k - 1);
    id2 = n - rpos[m - i] - (m - i) + 1;
    if (id1 + k - 1 < id2 and id2 + k - 1 <= n) {
      cout << "Yes"
           << "\n";
      cout << id1 << " " << id2 << "\n";
      return 0;
    }
  }
  cout << "No"
       << "\n";
}
