#include <bits/stdc++.h>
using namespace std;
const int maxn = 200000 + 10;
const int INF = 1e9;
int n, m, k;
int i, j;
int a[maxn], c[2010];
int pre[2 * maxn], other[2 * maxn], len[2 * maxn], last[2010], dis[2010];
bool vis[2010];
int sum[2010];
int tot;
queue<int> que;
void add(int x, int y, int z) {
  tot++;
  pre[tot] = last[x];
  last[x] = tot;
  other[tot] = y;
  len[tot] = z;
}
void SPFA() {
  dis[0] = 0;
  vis[0] = 1;
  que.push(0);
  while (!que.empty()) {
    int x = que.front();
    que.pop();
    vis[x] = 0;
    int p, q;
    for (p = last[x]; p; p = pre[p]) {
      q = other[p];
      if (dis[q] > dis[x] + len[p]) {
        dis[q] = dis[x] + len[p];
        if (!vis[q]) {
          vis[q] = 1;
          que.push(q);
        }
      }
    }
  }
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (i = 1; i <= n; i++) scanf("%d", &a[i]);
  sort(a + 1, a + n + 1);
  for (i = 1; i <= m; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    if (x > k) continue;
    c[x] = max(c[x], y);
  }
  for (i = 1; i <= k; i++) sum[i] = sum[i - 1] + a[i];
  for (i = 1; i <= k; i++) add(i - 1, i, a[i]);
  for (i = 1; i <= k; i++) {
    if (c[i] == 0) continue;
    for (j = 0; j + i <= k; j++) {
      add(j, j + i, sum[j + i] - sum[j + c[i]]);
    }
  }
  for (i = 1; i <= k; i++) dis[i] = INF;
  SPFA();
  printf("%d\n", dis[k]);
  return 0;
}
