#include<bits/stdc++.h>
using namespace std;
const int N=10010;
const int M=5010;
int n,m,w;
int c[N],d[N];
int u[M],v[M];
int t[N],jz[N],jq[N],cc[N],dd[N];
int zs,now;
int zz[N];
int f[N];
int find(int x){
if(f[x]==x) return x;
return f[x]=find(f[x]);
}
int j[N];
int main(){
cin>>n>>m>>w;
for(int i=1;i<=n;i++){
cin>>c[i]>>d[i];
}
for(int i=1;i<=m;i++){
cin>>u[i]>>v[i];
}
for(int i=1;i<=n;i++) f[i]=i;
for(int i=1;i<=m;i++){
f[find(u[i])]=find(v[i]);
}
for(int i=1;i<=m;i++){
f[find(u[i])]=find(v[i]);
}
/* for(int i=1;i<=n;i++){
cout<<f[i]<<" ";
}*/
for(int i=1;i<=n;i++){
t[f[i]]++;
jq[f[i]]+=c[i];
jz[f[i]]+=d[i];
if(t[f[i]]!=0) zs++;
}
now=1;
/* for(int i=1;i<=n;i++){
cout<<t[i]<<" ";
}*/
for(int i=1;i<=n;i++){
if(t[i]!=0){
cc[now]=jq[i];
dd[now]=jz[i];
now++;
}
}
/* for(int i=1;i<=zs;i++){
cout<<cc[i]<<" ";
}
cout<<endl;
for(int i=1;i<=zs;i++){
cout<<dd[i]<<" ";
}*/
for(int i=1;i<=zs;i++){
for(int j=w;j>=dd[i];j--){
f[j]=max(f[j],f[j-dd[i]]+dd[i]);
}
}
cout<<f[w];
}
/*
5 3 10
3 10
3 10
3 10
5 100
10 1
1 3
3 2
4 2
*/
在线等,很急