#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
class Unite{
public:
int v,c;
};
Unite work[105][105];//work[i][j]表示第i天第j个工作
int work_num[105];//work_num[i]表示第i天有几个工作
int dp[105][10005];//dp[i][j]表示第i天有精力j的情况下的最大报酬
int main(){
int d, w;
while(cin >> d >> w){
memset(work_num, 0, sizeof(work_num));
for(int i = 1; i <= d; i++){
int task;
cin >> task;
for(int j = 1; j <= task; j++){
cin >> work[i][work_num[i]].v >> work[i][work_num[i]].c;
work_num[i]++;
}
}
memset(dp, -1, sizeof(dp));
memset(dp[0], 0, sizeof(dp[0]));
for (int i = 1; i <= d; i++) {
for (int j = 0; j < work_num[i]; j++) {
for (int k = w; k >= work[i][j].v; k--) {
if (dp[i][k - work[i][j].v] != -1) {
dp[i][k] = max(dp[i][k - work[i][j].v] + work[i][j].c, dp[i][k]);
}
if (dp[i - 1][k - work[i][j].v] != -1) {
dp[i][k] = max(dp[i][k], dp[i - 1][k - work[i][j].v] + work[i][j].c);
}
}
}
}
if (dp[d][w] != -1) cout << dp[d][w] << endl;
else cout << "Impossible" << endl;
}
return 0;
}
//presented by 大吉大利,今晚AC