#include<iostream>
#define ri register int
using namespace std;
int n,m,maxn,f[10010],w[10010],v[10010],dp[10010];
int find(int x){
return x==f[x]?x:f[x]==find(f[x]);
}
void merge(int x,int y){
int tx=find(x);
int ty=find(y);
if(tx!=ty){
f[tx]=f[ty];
}
}
int main(){
std::ios::sync_with_stdio(false);
std::cin.tie(NULL);
cin>>n>>m>>maxn;
for(ri i=1;i<=n;i++){
f[i]=i;
cin>>w[i]>>v[i];
}
int x,y;
for(ri i=1;i<=m;i++){
cin>>x>>y;
merge(x,y);
}
int r;
for(ri i=1;i<=n;i++){
if(f[i]!=i){
r=find(f[i]);
w[r]=w[r]+w[i];
v[r]+=v[i];
w[i]=0;
v[i]=0;
}
}
for(ri i=1;i<=n;i++){
if(w[i]==0&&v[i]==0) continue;
for(ri j=maxn;j>=w[i];j--){
dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
}
}
cout<<dp[maxn]<<endl;
return 0;
}