#include <bits/stdc++.h>
using namespace std;
int k, n, l[5005], r[5005], t[4 * 3000005], f[3000005];
char s[3000005], ans[3000005];
inline void build(int l, int r, int v) {
  t[v] = r - l + 1;
  if (l < r) {
    build(l, (l + r) >> 1, v << 1);
    build(((l + r) >> 1) + 1, r, (v << 1) + 1);
  }
}
inline int get(int num, int l, int r, int v) {
  if (l == r) {
    return l;
  }
  if (num <= t[v << 1]) {
    return get(num, l, (l + r) >> 1, v << 1);
  }
  return get(num - t[v << 1], ((l + r) >> 1) + 1, r, (v << 1) + 1);
}
inline void del(int p, int l, int r, int v) {
  if (l <= p && p <= r) {
    t[v]--;
    if (l < r) {
      del(p, l, (l + r) >> 1, v << 1);
      del(p, ((l + r) >> 1) + 1, r, (v << 1) + 1);
    }
  }
}
int main() {
  while (scanf("%s %d %d", s, &k, &n) == 3) {
    for (int i = 0; i < n; i++) {
      scanf("%d %d", &l[i], &r[i]);
    }
    build(1, k, 1);
    for (int i = n - 1; i >= 0; i--) {
      if (r[i] < t[1]) {
        int len = r[i] - l[i] + 1;
        int pos = l[i] + 1;
        if (pos > r[i]) pos = l[i];
        for (int j = 0; j < len && r[i] < t[1]; j++) {
          int x = get(r[i] + 1, 1, k, 1);
          del(x, 1, k, 1);
          f[x] = get(pos, 1, k, 1);
          pos += 2;
          if (pos > r[i]) pos = l[i];
        }
      }
    }
    int p = 0;
    for (int i = 1; i <= k; i++) {
      if (f[i] == 0) {
        ans[i] = s[p++];
      } else {
        ans[i] = ans[f[i]];
      }
    }
    ans[k + 1] = 0;
    printf("%s\n", ans + 1);
  }
}
